我正在尝试从2D列表中访问索引列表,但出现以下错误。基本上我想找到两个值之间的数据,并将'weights'数组设置为1.0以用于以后的计算。
#data = numpy array of size (141,141)
weights = np.zeros([141,141])
ind = [x for x,y in enumerate(data) if y>40. and y<50.]
weights[ind] = 1.0
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
我尝试过使用np.extract()但不提供索引......
答案 0 :(得分:1)
想想我是这样做的:
#data = numpy array of size (141,141)
weights = np.zeros([141,141])
ind = ((data > 40.) & (data < 50.)).astype(float)
weights[np.where(ind==1)]=1.0
感谢有关使用numpy的矢量化功能的有用评论。第三行输出满足条件的1的大小(141,141)数组,以及失败的0的数组。然后我在那些位置用1.0s填充我的'权重'数组。
答案 1 :(得分:1)
如果您需要使用weights
填充( (value - 40) / 10)
,那么最好使用numpy.ma
:
data = np.random.uniform(0, 100, size=(141, 141))
weights = ((np.ma.masked_outside(data, 40, 50) - 40) / 10).filled(0)