Небольшое уточнение необходимо на numpy.any для матриц - PullRequest
1 голос
/ 07 октября 2011

У меня небольшая проблема с тем, чтобы numpy.any () нормально работала над моей проблемой.Представьте, что у меня есть трехмерная матрица матрицы NXMXM, где мне нужно избавиться от любой матрицы MXM, в которой все ее элементы одинаковы (все нули скажут).Вот пример, иллюстрирующий мою проблему

x = np.arange(250).reshape(10,5,5)
x[0,:,:] = 0

Что мне нужно сделать, это избавиться от первой матрицы 5X5, поскольку она содержит все нули.Поэтому я попытался с

np.any(x,axis=0)

и ожидал получить результаты

[FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE]

, но я получил

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

Применение следующих результатов с тем, что яхочу, но надеюсь, что есть лучший способ без каких-либо петель

for i in range(x.shape[0]):
       y.append(np.any(x[i,:,:]))

Я где-то здесь ошибся?Спасибо!

1 Ответ

4 голосов
/ 07 октября 2011

В матрице 10x5x5 с x[0,:,:] = 0 я ожидал бы результат:

[False,  True,  True,  True,  True,  True,  True,  True,  True,  True]

, потому что это первый из десять 5x5 массивов, который равен нулю, а не пять .

Вы получаете этот результат, используя

x.any(axis=1).any(axis=1)

или

x.any(axis=2).any(axis=1)

, что означает, что вы сначала удаляете второе (ось = 1) илитретье (asix = 2) измерение, а затем оставшееся второе (axis = 1), и вы получите только одно измерение, которое изначально было первым (axis = 0).

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