Python Numpy:如何根据不同的公式的值在数组中应用不同的公式(如果elif elif…对于Numpy是else)?
我有一个数的numpy数组Python Numpy:如何根据不同的公式的值在数组中应用不同的公式(如果elif elif…对于Numpy是else)?,python,numpy,Python,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
和一些阈值[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])
cond_A=np,其中(xa)&(xb)&(xc)&(xd)
x[cond_A]=函数(x[cond_A])
...
...
x[cond_E]=函数(x[cond_E])
编辑:如果我尝试此操作,我会得到错误:
ValueError:包含多个元素的数组的真值为
模棱两可的。使用a.any()或a.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]
将numpy导入为np
def功能(x):
返回x+10
a=np.arange(10)
打印(a)#[01 2 3 4 5 6 7 8 9]
mask=np.intersect1d(np.where(a>3),np.where(a&
是按位and
运算符,我假设您使用的是和
,因为这是您报告的错误发生的时间
如果您希望以这种方式操作数组,函数编程概念(如映射和筛选或列表理解)将对您有所帮助。其他答案使用numpy函数,下面是使用列表理解的答案:
x = [function_A(i) if cond_A else i for i in myarray]