Как перенести numy ndarray на место? - PullRequest
0 голосов
/ 02 сентября 2018

Я использую NumPy.

У меня есть ndarray в форме [T, H, W, C], и я хочу транспонировать его, чтобы он стал похожим на: [T, C, H, W]. Тем не менее, этот массив огромен, и я хочу быть эффективным с точки зрения памяти.

Но я только что нашел np.transpose для этого, который не на месте .

Почему такие операции, как np.transpose, не имеют своего аналога на месте?

Раньше я думал, что любая операция с именем np.Bar будет иметь свой аналог на месте с именем np.Bar_, только чтобы обнаружить, что это не правда.

1 Ответ

0 голосов
/ 02 сентября 2018

С np.transpose документы

Представление возвращается при любой возможности.

означает, что для выходного массива не выделена дополнительная память.

>>> import numpy as np

>>> A = np.random.rand(2, 3, 4, 5)
>>> B = np.transpose(A, axes=(0, 3, 1, 2))

>>> A.shape
(2, 3, 4, 5)
>>> B.shape
(2, 5, 3, 4)

Вы можете использовать np.shares_memory, чтобы проверить, является ли B представлением A:

>>> np.shares_memory(A, B)
True

Итак, вы можете безопасно перемещать свои данные с помощью np.transpose.

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