Добавление одномерных массивов numpy не приводит к матрице

#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)