Альтернатива использованию 'in' с numpy.where () - PullRequest
2 голосов
/ 11 сентября 2011

Допустим, у меня есть массив 'foo' с двумя столбцами.Столбец 0 имеет значения от 1 до 12, указывающие месяцы.Столбец 1 имеет соответствующие значения измерений.Если бы я хотел создать маску значений измерений с декабря, января и февраля (12,1,2), я бы заподозрил, что смог бы:

numpy.where(foo[:,1] in (12, 1, 2), False, True)

Но, похоже, мой умный 'в (12, 1, 2) 'не работает как условие для where ().Не похоже, что он работает как [12, 1, 2] и т. Д. *

Есть ли другой способ сделать это?Есть ли лучший способ для меня собрать все (12, 1, 2) измерения в массив?Что такое простой способ?

(Изменение формы массива не может быть и речи, потому что в каждом месяце существует нерегулярное количество измерений)

1 Ответ

4 голосов
/ 11 сентября 2011

Я думаю, что причина, по которой «in (12, 1, 2)» не работает, состоит в том, что элемент перед «in» должен быть одним элементом.

Но для этого у numpy есть функция in1d ( документация ), чтобы сделать 'in' с массивом numpy.С вашим кодом:

np.where(np.in1d(foo[:,0], [12, 1, 2]), False, True)

Чтобы завершить ответ комментарием: в этом случае использование where является избыточным, вывод in1d может использоваться для индексации foo:

foo[np.in1d(foo[:,0], [12, 1, 2])]

или для

foo[~np.in1d(foo[:,0], [12, 1, 2])]

Примечание: in1d доступно только для numpy 1.4 или выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...