我有一个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)的数组。
有没有合理的方法以这种方式选择索引?或者:在这种情况下是否有必要使用一些面具?
答案 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,:]