Подтвердить что ты не робот

Тестирование, если массив numpy симметричен?

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

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

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

EDIT: уточнить, я ищу более "элегантный" способ:

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

Ответ 1

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

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

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

(arr.transpose(1, 0, 2) == arr).all()

Ответ 2

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

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

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

arr[np.isnan(arr)] = 0