Нарезка массива Numpy для выбора строк со значениями в списке.Ошибка значения истины - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть двумерный массив, и я хочу выбрать строки, которые имеют определенное значение в данном столбце.Это достаточно просто сделать с одним или несколькими числами, но я не могу сделать это для списка.Код ниже, с тем, что я получил, чтобы работать, и моя попытка использовать список:

matrix = np.ndarray([4, 5])
matrix[0,:] = range(1,6)
matrix[1,:] = range(6,11)
matrix[2,:] = range(11,16)
matrix[3,:] = range(16,21)

li=[9,19]

matrix2=matrix[matrix[:,3]==9] # this gives me one of the requirements.
print(matrix2)
matrix3=matrix[(matrix[:,3]==9) | (matrix[:,3]==19)] # Multiple requirements explicitly laid out works.
print(matrix3)
matrix4=matrix[matrix[:,3] in li] # multiple requirements in list form do not work.
print(matrix4)

Я также рассмотрел использование команды np.where (), как предложено в Условноиндексирование с помощью Numpy ndarray , но это не помогает мне, и, похоже, не меняет результаты, когда оно используется вместо среза, который я использовал выше.

Я получаю конкретное сообщение об ошибке::

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Но я не понимаю, как мне могут помочь команды a.any () или a.all ().

1 Ответ

0 голосов
/ 18 февраля 2019

Используйте np.isin ( документы здесь )

matrix4=matrix[np.isin(matrix[:,3], li)]
...