Как извлечь строки в массиве, которые содержат определенное значение?(Numpy, Scipy) - PullRequest
0 голосов
/ 21 ноября 2010

У меня есть пустой массив 2D, и я хочу, чтобы он возвращал столбец c, где (r, c-1) (строка r, столбец c) равно некоторому значению (int n).

Я не знаюЯ не хочу перебирать строки, записывая что-то вроде

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

, потому что их 4000, а этот двумерный массив - только один из 20, который мне нужно посмотреть.

Я нашел "фильтр ", но не знаю, как его использовать (не найдено документов).

Есть ли функция, которая обеспечивает такой поиск?

Ответы [ 2 ]

4 голосов
/ 21 ноября 2010

Надеюсь, я правильно понял ваш вопрос.Допустим, у вас есть массив 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 возвращает логический массив, отмечающий совпадающие записи, и затем мы используем расширенное индексирование для извлечения соответствующих строк.

Конечно, NumPy нужно перебирать все записи, но это будет намного быстрее, чем в Python.

0 голосов
/ 21 ноября 2010

Массивы Numpy не индексируются. Если вам нужно выполнить эту конкретную операцию более эффективно, чем линейно по размеру массива, тогда вам нужно использовать что-то отличное от numpy.

...