如何更改具有多个条件的 numpy 数组中的每个值
how to change every value in a numpy array with more than one condition
我之前曾针对 1 个条件问过一些更苗条的问题,这是一个简单的答案,而且效果很好。
现在我正试图找到一种方法,在两种情况下做同样的事情。
for j in range(5,45):
# inter_data[(j*100) <= inter_data < ((j+1)*100)] = (j*100) + 50
inter_data = np.where(((j + 1) * 100) > inter_data > (j * 100), (j * 100) + 50, inter_data)
我试过使用相同的技术,但没有用。似乎这只能在一种情况下工作。
它给出了两个条件下的错误
ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
尝试:
inter_data = np.where((((j + 1) * 100) > inter_data) & (inter_data > (j * 100)), (j * 100) + 50, inter_data)
您可以使用逻辑与操作 &
来执行此操作,如下所示,使用矢量化(不使用 python 循环)
import numpy as np
ar = np.arange(5,45)
inter_data = np.arange(100, 100+40*100, 100)
cond = (ar+1) * 100 > inter_data
cond &= (ar) * 100 < inter_data
np.where(cond, ar*100+50, inter_data)
我之前曾针对 1 个条件问过一些更苗条的问题,这是一个简单的答案,而且效果很好。
现在我正试图找到一种方法,在两种情况下做同样的事情。
for j in range(5,45):
# inter_data[(j*100) <= inter_data < ((j+1)*100)] = (j*100) + 50
inter_data = np.where(((j + 1) * 100) > inter_data > (j * 100), (j * 100) + 50, inter_data)
我试过使用相同的技术,但没有用。似乎这只能在一种情况下工作。
它给出了两个条件下的错误
ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
尝试:
inter_data = np.where((((j + 1) * 100) > inter_data) & (inter_data > (j * 100)), (j * 100) + 50, inter_data)
您可以使用逻辑与操作 &
来执行此操作,如下所示,使用矢量化(不使用 python 循环)
import numpy as np
ar = np.arange(5,45)
inter_data = np.arange(100, 100+40*100, 100)
cond = (ar+1) * 100 > inter_data
cond &= (ar) * 100 < inter_data
np.where(cond, ar*100+50, inter_data)