使用逻辑运算符索引numpy数组

时间:2014-01-07 14:48:49

标签: python arrays numpy indexing

我有一个2d numpy数组,例如:

import numpy as np
a1 = np.zeros( (500,2) )

a1[:,0]=np.arange(0,500)
a1[:,1]=np.arange(0.5,1000,2)
# could be also read from txt

然后我想选择与一个匹配条件相对应的索引,例如范围(l1,l2)中包含的所有值a1 [:,1]:

l1=20.0; l2=900.0; #as example

我想做一个浓缩的表达。但是,两者都没有:

np.where(a1[:,1]>l1 and a1[:,1]<l2)

(它给出了ValueError,它建议使用np.all,在这种情况下我不清楚);既不:

np.intersect1d(np.where(a1[:,1]>l1),np.where(a1[:,1]<l2))

正在工作(它提供了不可用的类型:'numpy.ndarray')

我的想法是使用这些索引来映射另一个大小(500,n)的数组。

有没有合理的方法以这种方式选择索引?或者:在这种情况下是否有必要使用一些面具?

2 个答案:

答案 0 :(得分:4)

这应该有效

np.where((a1[:,1]>l1) & (a1[:,1]<l2))

np.where(np.logical_and(a1[:,1]>l1, a1[:,1]<l2))

答案 1 :(得分:1)

这样做你想要的吗?

import numpy as np
a1 = np.zeros( (500,2) )
a1[:,0]=np.arange(0,500)
a1[:,1]=np.arange(0.5,1000,2)
c=(a1[:,1]>l1)*(a1[:,1]<l2) # boolean array, true if the item at that position is ok according to the criteria stated, false otherwise 
print a1[c] # prints all the points in a1 that correspond to the criteria 

之后你可以选择你所做的新阵列,你需要的点(假设你的新阵列有尺寸(500,n)),做

print newarray[c,:]