Numpy .all () игнорирует IndexError - PullRequest
0 голосов
/ 21 июня 2019

Допустим, у нас есть следующий массив:

a = np.zeros((3,3,3))

работают одиночные проверки:

a[1,1,1] == 0 -> True

a[5,1,1] == 0 ->IndexError

при проверке области массива не отображается indexError

(a[0:2,0:2,0:2] == 0).all() -> True

(a[0:20,0:2,0:2] == 0).all() -> True - результат, ноэто должно быть IndexError

В таких случаях я хотел бы получить False или хотя бы ошибку, какие-либо подсказки?

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

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

a = np.zeros((3, 3))
padded = np.pad(a.astype(object), [(0, 1), (0, 1)], 'constant', constant_values=None)

print((a[:3, :3] == 0).all())
print((a[:4, :4] == 0).all())

print((padded[:3, :3] == 0).all())
print((padded[:4, :4] == 0).all())

Вывод:

True
True
True
False

Обратите внимание, что для этого необходимо преобразовать ваш массив в тип object.

0 голосов
/ 21 июня 2019

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

Я не уверен, что вы можете изменить это поведение. Единственное решение, которое я могу придумать, - это сначала проверить, меньше ли индексы, чем размер каждого измерения, и выполнить сравнение после.

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