Python Numpy:如何根据不同的公式的值在数组中应用不同的公式(如果elif elif…对于Numpy是else)?

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

我有一个数的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])
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]