Каков наилучший способ сохранить размерность при подстановке массивов numpy? - PullRequest
0 голосов
/ 16 декабря 2018

Предположим, у меня был стандартный массив NumPy, например

a = np.arange(6).reshape((2,3))

. Когда я подмассиву массив, выполняя такую ​​задачу, как

a[1, :]

, я потеряю размерность, и она превратится в1D и печать, array([3, 4, 5]) Конечно, список в 2D, вы изначально хотите сохранить размерность.Поэтому я должен выполнить утомительное задание, такое как

b=a[1, :]
b.reshape(1, b.size)

Почему numpie уменьшает размерность при подстановке?

Каков наилучший способ сохранить размерность,так как a[1, :].reshape(1, a.size) сломается?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Хотя я согласен с ответом Джона Цвинка, я хотел предоставить альтернативу на тот случай, если по какой-то причине вы вынуждены использовать индексацию (вместо нарезки).

OP говорит, что "a[1, :].reshape(1, a.size) будетbreak ":

Вы можете добавить размеры в массивы numpy следующим образом:

b = a[1]
# array([3, 4, 5]
b = a[1][np.newaxis]
# array([[3, 4, 5]])

(Обратите внимание, что np.newaxis это None, но это намного большечитаемый для использования np.newaxis)


Как указано в комментариях (@PaulPanzer и @Divakar), на самом деле существует много способов сделать то же самое (опять же, с помощью индексации вместо нарезки):

Эти копии не создаются (данные изменяются при каждом воздействии a)

a[1, None]
a[1, np.newaxis]
a[1].reshape(1, a.shape[1]) # Use shape, not size

Эта копия создается (данные не зависят от a)

a[[1]]
0 голосов
/ 16 декабря 2018

Просто используйте нарезку вместо индексации, и форма будет сохранена:

a[1:2]
...