Я создаю симметричные матрицы/массивы в Python с NumPy, используя стандартный метод:
x = rand(500,500)
x = (x+x.T)
all(x==x.T)
> True
Теперь позвольте быть умным:
x = rand(500,500)
x += x.T
all(x==x.T)
> False
Подождите, что?
x==x.T
> array([[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
...,
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True]], dtype=bool)
Верхний левый и нижний правый сегменты симметричны. Что делать, если я выбрал меньший массив?
x = rand(50,50)
x += x.T
all(x==x.T)
> True
OK....
x = rand(90,90)
x += x.T
all(x==x.T)
> True
x = rand(91,91)
x += x.T
all(x==x.T)
> False
И просто чтобы быть уверенным...
x = rand(91,91)
x = (x+x.T)
all(x==x.T)
> True
Является ли это ошибкой, или я собираюсь узнать что-то сумасшедшее о +=
и массивах NumPy?