Подмножество одного столбца относительно значений в другом столбце

Я прочитал множество постов в интернете о нарезке массива, однако ни один из них не отвечает на мой вопрос.

У меня есть массив с тремя столбцами, скажем, A, B и Y. И все значения равны 1 или 0. Я хочу узнать результирующие значения Y, если применить фильтр к столбцу A, т. Е. Если A==0 тогда какие значения Y я получу.

В качестве примера, вот массив NumPy

A  B  Y
0  0  1
1  0  0
0  0  1
0  0  0

поэтому, если я выберу A = 0, то Y станет 1,1,0.

Я был бы очень признателен, если бы кто-нибудь показал мне, как это сделать (используя этот пример), когда результат одного столбца зависит от значений в другом столбце.

1 ответ

Решение

Вы можете индексировать по строке и столбцу одновременно. Используйте логическое индексирование в первом измерении, целочисленный индекс во втором измерении:

A = np.array([[0, 0, 1],
              [1, 0, 0],
              [0, 0, 1],
              [0, 0, 0]])

B = A[A[:, 0] == 0, 2]   # array([1, 1, 0])
B = A[A[:, 0] == 0, -1]  # equivalent solution, negative indices supported

Обратите внимание на ярлыки, такие как A, B, Y не существует с обычными массивами NumPy. Для выбора конкретной строки или столбца используйте целочисленные индексы, отметив, что первая строка или столбец имеет индекс 0, A[:, 0] == 0 возвращает логический массив, который используется для фильтрации первого измерения (строк).

Другие вопросы по тегам