如何提取包含特定值的数组中的行? (numpy,scipy)

时间:2010-11-21 18:47:27

标签: arrays numpy lines

我有一个numpy 2D数组,我希望它返回coloumn c,其中(r,c-1)(行r,coloumn c)等于某个值(int n)。

我不想迭代写

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

,因为它们有4000个而且这个2D数组只是20个中的一个,我必须看看它。

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

是否有提供此类搜索的功能?

2 个答案:

答案 0 :(得分:4)

我希望我能正确理解你的问题。假设你有一个数组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中执行要快得多。

答案 1 :(得分:0)

Numpy数组未编入索引。如果你需要在数组大小上比线性更有效地执行这个特定的操作,那么你需要使用numpy以外的东西。