инициализировать массив NumPy - PullRequest
105 голосов
/ 26 декабря 2010

Есть ли способ инициализировать массив фигуры и добавить к нему?Я объясню, что мне нужно, с примером списка.Если я хочу создать список объектов, сгенерированных в цикле, я могу сделать:

a = []
for i in range(5):
    a.append(i)

Я хочу сделать что-то подобное с массивом numpy.Я знаю о vstack, сцеплении и т. Д. Однако, кажется, что они требуют двух массивов в качестве входных данных.Что мне нужно, это:

big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
    array i of shape = (2,4) created.
    add to big_array

big_array должен иметь форму (10,4).Как это сделать?


РЕДАКТИРОВАТЬ:

Я хочу добавить следующее уточнение.Я знаю, что могу определить big_array = numpy.zeros((10,4)) и затем заполнить его.Однако для этого необходимо заранее указать размер big_array.Я знаю размер в этом случае, но что если я не знаю?Когда мы используем функцию .append для расширения списка в python, нам не нужно заранее знать его окончательный размер.Мне интересно, существует ли нечто подобное для создания большего массива из меньших массивов, начиная с пустого массива.

Ответы [ 12 ]

2 голосов
/ 18 октября 2016

Я понимаю, что это немного поздно, но я не заметил других ответов, в которых упоминается индексирование в пустой массив:

big_array = numpy.empty(10, 4)
for i in range(5):
    array_i = numpy.random.random(2, 4)
    big_array[2 * i:2 * (i + 1), :] = array_i

Таким образом, вы предварительно выделяете весь массив результатов с помощью numpy.empty и заполняйте строки по мере использования индексного присваивания.

Совершенно безопасно предварительно выделить empty вместо zeros в приведенном вами примере, поскольку вы гарантируете, что весь массив будет заполненс порциями, которые вы генерируете.

1 голос
/ 06 марта 2018

Может быть, что-то вроде этого будет соответствовать вашим потребностям ..

import numpy as np

N = 5
res = []

for i in range(N):
    res.append(np.cumsum(np.ones(shape=(2,4))))

res = np.array(res).reshape((10, 4))
print(res)

, который производит следующий вывод

[[ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...