Вопрос:

Найти подходящие строки в двумерном массиве в порядке, соответствующие столбцы в двумерном массиве не в порядке

python arrays numpy

185 просмотра

2 ответа

1 Репутация автора

python 3.6.3 / numpy 1.13.3 / ubuntu 17.10

Я новичок в numpy и сталкиваюсь с некоторыми проблемами с логическим индексированием. Это мой тестовый массив:

>>> b
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

Я хочу получить строку со значениями [5, 6, 7, 8, 9]

>>> np.all(b==( 5,  6,  7,  8,  9), axis=1)
array([False,  True, False, False], dtype=bool)

и это работает, строка с индексом 1 соответствует.

Теперь я хочу получить столбец со значением [4,9,14,29], и я пытаюсь с:

>>> np.all(b==( 4,  9,  14,  19), axis=0)
False

но результат не является ожидаемым (по крайней мере, мной), так как я надеюсь получить логический массив, такой как:

array([False, False, False, False, True], dtype=bool) 

говорит мне, что есть соответствующий столбец с индексом 4.

Что не так в моих догадках?

Автор: kammamuri Источник Размещён: 09.11.2017 12:06

Ответы (2)


0 плюса

745 Репутация автора

np.all проверяет, все ли массивы вдоль заданной оси имеют значение true, поэтому, когда вы проводите второе сравнение, он сначала сравнивает второй массив со всеми строками массива 2d и устанавливает их значения true или false в зависимости от того, равны ли они.

После этого он проверяет, все ли массивы (которые являются булевыми) вдоль заданной оси (которая является осью столбца в случае 0) теперь оцениваются как истинные, а они - нет (так как исходный размер строки двухмерного массива и размер переданного массива не совпадают) так что все ложно) и, следовательно, np.allтакже возвращает ложь.

Попробуй это

np.all(b.T==( 4,  9,  14,  19), axis=0)
Автор: apsdehal Размещён: 09.11.2017 12:21

0 плюса

42113 Репутация автора

Вы должны использовать массивы для этого. И с учетом правильных размеров:

In [17]: col = np.array(( 4,  9,  14,  19)).reshape(-1, 1)

In [18]: b == col
Out[18]:
array([[False, False, False, False,  True],
       [False, False, False, False,  True],
       [False, False, False, False,  True],
       [False, False, False, False,  True]], dtype=bool)

А потом:

In [22]: (b == col).all(axis=0)
Out[22]: array([False, False, False, False,  True], dtype=bool)
Автор: juanpa.arrivillaga Размещён: 09.11.2017 12:22
Вопросы из категории :
32x32