Это O (1), потому что он вообще не копирует данные. Просто изменяет форму и шагает.
>>> A = np.random.rand(3,4)
>>> A.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
>>> np.transpose(A).flags
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
Обратите внимание, что C_CONTIGUOUS
, F_CONTIGUOUS
были поменяны местами (т. Е. Основные изменения порядка итераций), а транспонированный массив имеет OWNDATA
false (т. Е. Это просто просмотр данных исходного массива).
Подсказка: если у вас есть такое представление, чтобы найти массив с данными, вы можете проверить base
атрибут
>>> np.transpose(A).base is A
True