проверка симметричности массива NumPy? - PullRequest
14 голосов
/ 16 марта 2011

Есть ли лучший питонный способ проверки, является ли ndarray диагонально симметричным в определенном измерении?то есть для всех х

(arr[:,:,x].T==arr[:,:,x]).all()

Я уверен, что мне не хватает (дух) ответа, но его 2:15 здесь ...:)

РЕДАКТИРОВАТЬ: чтобы уточнить, яищу более «элегантный» способ сделать:

for x in range(xmax):
    assert (arr[:,:,x].T==arr[:,:,x]).all()

Ответы [ 2 ]

20 голосов
/ 16 марта 2011

Если я вас правильно понял, вы хотите сделать проверку

all((arr[:,:,x].T==arr[:,:,x]).all() for x in range(arr.shape[2]))

без цикла Python. Вот как это сделать:

(arr.transpose(1, 0, 2) == arr).all()
13 голосов
/ 09 декабря 2013

Если ваш массив содержит числа с плавающей запятой (особенно если они являются результатом вычислений), используйте allclose

np.allclose(arr.transpose(1, 0, 2), arr)

Если некоторые из ваших значений могут быть NaN, установите для них значение маркера перед тестом.

arr[np.isnan(arr)] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...