2010-11-21 82 views
0

我有一个numpy的2D数组,我希望它返回coloumn c,其中(r,c-1)(row r,coloumn c)等于某个值(int n)。如何提取包含特定值的数组中的行? (numpy,scipy)

我不想遍历写东西的行状

for r in len(rows): 
    if array[r, c-1] == 1: 
    store array[r,c] 

,因为有他们的4000和这个二维数组只是20我要看看低谷之一。

我发现“过滤器”,但不知道如何使用它(找不到文档)。

是否有一个功能,提供这样的搜索?

回答

3

我希望我能正确理解你的问题。比方说,你有一个数组a

a = array(range(7)*3).reshape(7, 3) 
print a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 0, 1], 
     [2, 3, 4], 
     [5, 6, 0], 
     [1, 2, 3], 
     [4, 5, 6]]) 

,并要提取所有的行,其中第一项是2。这是可以做到这样的:

print a[a[:,0] == 2] 
array([[2, 3, 4]]) 

a[:,0]表示阵列,== 2返回一个布尔标记阵列相匹配的条目的第一列,然后我们使用advanced indexing以提取相应的行。

当然,NumPy需要遍历所有条目,但是这比在Python中执行要快得多。

+0

这几乎做我想要的。我希望它返回第一个颜色为'2'的行。在你的例子中返回数组([[2,3,4]])。 – Sebastian 2010-11-21 20:12:01

+0

好吧,我会更新我的答案。 – 2010-11-21 21:12:50

+0

这是否更好? – 2010-11-21 21:18:58

0

Numpy数组未被编入索引。如果您需要在数组大小上比线性更有效地执行此特定操作,那么您需要使用除numpy以外的其他内容。

+0

我知道我必须看每一行,但我不想用循环做到这一点。我希望有内置函数,它可以比循环更快地完成任务。 – Sebastian 2010-11-21 20:14:11

相关问题