从2D列表访问索引 - Python

时间:2016-02-16 17:29:17

标签: python-2.7 numpy indexing indices

我正在尝试从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()但不提供索引......

2 个答案:

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