Преобразование 1D массива в 2D массив в numpy
Я хочу преобразовать 1-мерный массив в 2-мерный массив, указав количество столбцов в 2D-массиве. Что-то, что будет работать так:
> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
[3, 4],
[5, 6]])
есть ли у numpy функция, которая работает как моя составная функция "vec2matrix"? (Я понимаю, что вы можете индексировать массив 1D как 2D - массив, но это не вариант в коде, который у меня есть-мне нужно сделать это преобразование.)
3 ответа:
вы хотите
reshape
массив.B = np.reshape(A, (-1, 2))
у вас есть два варианта:
Если вам больше не нужна исходная форма, проще всего просто назначить новую форму массиву
a.shape = (a.size//ncols, ncols)
вы можете переключиться между
a.size//ncols
by-1
для автоматического вычисления правильной формы. Убедитесь, чтоa.shape[0]*a.shape[1]=a.size
, иначе вы столкнетесь с какой-то проблемой.вы можете получить новый массив с
np.reshape
функция, которая работает в основном как представленная версия вышеnew = np.reshape(a, (-1, ncols))
когда это возможно,
new
будет просто представление исходного массиваa
, это означает, что данные являются общими. В некоторых случаях, однако,new
массив будет acopy вместо этого. Обратите внимание, чтоnp.reshape
также принимает необязательное ключевое словоorder
, что позволяет переключаться с строкам C до Столбцов Фортран заказа.np.reshape
является версией функцииa.reshape
метод.если вы не можете соблюдать требование
a.shape[0]*a.shape[1]=a.size
, ты застрял с необходимостью создать новый массив. Вы можете использоватьnp.resize
функция и смешивание его сnp.reshape
, например>>> a =np.arange(9) >>> np.resize(a, 10).reshape(5,2)