我知道我可以替换大于某个值的Python NumPy Array的所有元素:
np.putmask(A, A>0.5, 5)
其中A>0.5
是阈值,5是新替换。但是,我怎样才能在更多条件下做到这一点?例如:
if x.all <0:
return 00.1
elif x.all >0:
return 1
其中x是数组。我试着:
np.putmask(x, x<0, 00.1)
和
np.putmask(x, x>0, 1)
但是,我想在一行中完成。有关如何使用putmask或任何其他方法在一行中进行此类替换的任何想法吗?
答案 0 :(得分:4)
你在寻找双重np.where,即
A = np.array([0,1,2,3,1,-5,-6,-7])
k = np.where(A>0,1,np.where(A<0,0.01,A))
或者您可以将np.select
用于多种情况。
k = np.select([A>0,A<0],[1,.01],A)
Ouptut:
[ 0. 1. 1. 1. 1. 0.01 0.01 0.01]
答案 1 :(得分:2)
您可以创建每个条件的掩码(逻辑数组),然后应用所有掩码。
db.findOne($and:[{category:'Health'},{$or: [{language: 'en'},{language:'fr'}]}]);
如果你真的需要一行:
# Create masks
mask1 = (x < 0)
mask2 = (x > 0)
# Apply masks
x[mask1] = 0.1
x[mask2] = 1
您也可以使用示例代码中的mask1 = (x < 0); mask2 = (x > 0); x[mask1] = 0.1; x[mask2] = 1
函数:
putmask