Ответ 1
Вы хотите reshape
массив.
B = np.reshape(A, (-1, 2))
Я хочу преобразовать одномерный массив в двумерный массив, указав количество столбцов в двумерном массиве. Что-то, что будет работать так:
> 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"? (Я понимаю, что вы можете индексировать одномерный массив как двумерный массив, но это не вариант в моем коде - мне нужно сделать это преобразование.)
Вы хотите reshape
массив.
B = np.reshape(A, (-1, 2))
У вас есть два варианта:
Если вам больше не нужна исходная форма, проще всего назначить новую фигуру массиву
a.shape = (a.size//ncols, ncols)
Вы можете переключить a.size//ncols
на -1
, чтобы автоматически вычислить правильную форму. Убедитесь, что a.shape[0]*a.shape[1]=a.size
, иначе вы столкнетесь с некоторыми проблемами.
Вы можете получить новый массив с функцией np.reshape
, которая работает в основном как версия, представленная выше
new = np.reshape(a, (-1, ncols))
Когда это возможно, new
будет просто представлением начального массива a
, что означает, что данные являются общими. В некоторых случаях, однако, массив new
будет скорее acopy. Обратите внимание, что np.reshape
также принимает необязательное ключевое слово order
, которое позволяет вам перейти от строкового порядка с порядком порядка Fortran к столбцу. 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)
Попробуйте что-то вроде:
B = np.reshape(A,(-1,ncols))
Вам нужно будет убедиться, что вы можете разделить количество элементов в вашем массиве на ncols
. Вы также можете играть с порядком, в котором цифры втягиваются в B
с помощью ключевого слова order
.
Измените массив 1D на 2D без использования Numpy.
l = [i for i in range(1,21)]
part = 3
new = []
start, end = 0, part
while end <= len(l):
temp = []
for i in range(start, end):
temp.append(l[i])
new.append(temp)
start += part
end += part
print("new values: ", new)
# for uneven cases
temp = []
while start < len(l):
temp.append(l[start])
start += 1
new.append(temp)
print("new values for uneven cases: ", new)
Вы можете использовать flatten()
из пакета NumPy.
import numpy as np
a = np.array([[1, 2],
[3, 4],
[5, 6]])
a_flat = a.flatten()
print(f"original array: {a} \nflattened array = {a_flat}")
Выход:
original array: [[1 2]
[3 4]
[5 6]]
flattened array = [1 2 3 4 5 6]