如何替换大于几个值的Python NumPy Array的所有元素?

时间:2017-10-23 12:07:16

标签: python arrays numpy math

我知道我可以替换大于某个值的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或任何其他方法在一行中进行此类替换的任何想法吗?

2 个答案:

答案 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