Numpy:如何根据不同的公式的值在数组中应用不同的公式(如果elif-elif-else表示Numpy)



我有一个数字的numpy数组x和一些阈值[A,B,C,D]

我想对数组的每个切片应用5个不同的公式,但理想情况下我不想对它进行迭代(这就是我尝试使用numpy的原因(。

最好的方法是什么?这就是我想做的,有更好的方法吗?

cond_A = np.where(x <= A)
cond_B = np.where((x > A) & (x <= B))
cond_C = np.where((x > B) & (x <= C))
cond_D = np.where((x > C) & (x <= D))
cond_E =np.where(x > D)
x[cond_A] = function_A(x[cond_A])
...
...
x[cond_E]= function_E(x[cond_E])

编辑:如果我尝试这个,我会得到错误:

ValueError:具有多个元素的数组的真值为模棱两可的使用.any((或.all((

您必须使用numpy中的intersect1d函数才能应用多个筛选器。下面是一个在评论中输出的例子,希望这能帮助

import numpy as np
def function(x):
return x+10
a = np.arange(10)
print(a) # [0 1 2 3 4 5 6 7 8 9]
mask = np.intersect1d(np.where(a>3), np.where(a<6))
a[mask] = function(a[mask])
print(a) # [ 0  1  2  3 14 15  6  7  8  9]

&bitwise and运算符,我假设您使用的是and,因为这是您报告的错误发生的时间。

如果您想以这种方式操作数组,函数式编程概念(如映射和过滤器或列表理解(将对您有所帮助。其他答案使用了numpy函数,下面是一个使用列表理解的答案:

x = [function_A(i) if cond_A else i for i in myarray]

最新更新