Numpy: изменение формы несколько раз делает объекты неравными - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь выполнить некоторые операции по изменению формы в numpy, но, кажется, не могу выполнить что-то, что кажется довольно простым.

Следующее прекрасно работает:

import numpy as np

X = np.random.rand(55, 100, 3)

b = None
for i in range(X.shape[1]):
    r = X[:, i:i+1, :]
    b = r if not np.any(b) else np.concatenate((b, r), axis=1)

assert np.all(X == b.reshape(X.shape[0], X.shape[1], X.shape[2])) # succeeds

Однако, когдаЯ пытаюсь изменить r перед добавлением его в строки в b. Кажется, я не могу изменить окончательный b в форму X:

import numpy as np

X = np.random.rand(55, 100, 3)

b = None
for i in range(X.shape[1]):
    r = X[:, i:i+1, :].reshape(1, X.shape[0] * X.shape[2])
    b = r if not np.any(b) else np.concatenate((b, r), axis=1)

assert np.all(X == b.reshape(X.shape[0], X.shape[1], X.shape[2])) # fails

Я знаю тамЕсть лучшие способы выполнить этот вид операции.Я упрощаю более сложную ситуацию.

Кто-нибудь знает, как я могу добиться успеха во втором утверждении при сохранении общей структуры второго фрагмента?Любые предложения будут очень полезны!

1 Ответ

0 голосов
/ 22 октября 2018

Как вы сказали, вероятно, есть способы сделать это лучше, но если вы абсолютно хотите придерживаться своей структуры, вам просто нужно переставить ваши индексы:

assert np.all(X == np.transpose(b.reshape(X.shape[1], X.shape[0], X.shape[2]), axes=(1,0,2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...