#python #initialization #append #numpy-ndarray
#python #инициализация #добавить #numpy-ndarray
Вопрос:
Я пытаюсь получить 2d-массив, случайным образом генерируя его строки и добавляя
import numpy as np
my_nums = np.array([])
for i in range(100):
x = np.random.rand(2, 1)
my_nums = np.append(my_nums, np.array(x))
Но я не получаю то, что хочу, а вместо этого получаю одномерный массив.
Что не так? Транспонирование x также не помогло.
Ответ №1:
Вы могли бы сделать это с помощью np.append(axis=0)
или np.vstack
. Однако для этого требуется, чтобы добавляемые строки имели ту же длину, что и строки, уже имеющиеся в массиве.
Вы не можете использовать один и тот же код для добавления строки с двумя значениями к пустому массиву и для добавления строки к уже существующему 2D-массиву: numpy выдаст ValueError: all the input arrays must have same number of dimensions
.
Вы могли бы инициализировать my_nums
, чтобы обойти это:
my_nums = np.random.rand(1, 2)
for i in range(99):
x = np.random.rand(1, 2)
my_nums = np.append(my_nums, x, axis=0)
Обратите внимание на уменьшение диапазона на единицу из-за строки инициализации. Также обратите внимание, что я изменил размеры на (1, 2), чтобы получить фактические векторы строк.
Конечно, гораздо проще, чем добавление по строкам, создать массив в желаемой окончательной форме:
my_nums = np.random.rand(100, 2)