Создать матрицу в цикле с NumPy - PullRequest
0 голосов
/ 25 мая 2018

Я хотел бы построить пустую матрицу, используя строки, которые я получаю в цикле.Но как мне инициализировать матрицу?Если я напишу

A = []
A = numpy.vstack((A, [1, 2]))

, я получу

ValueError: все размеры входного массива, за исключением оси конкатенации, должны точно совпадать

Каков наилучший метод для этого?

ПРИМЕЧАНИЕ: я не знаю количество строк заранее.Количество столбцов известно.

1 Ответ

0 голосов
/ 25 мая 2018

Неизвестное количество строк

Одним из способов является формирование списка списков, а затем преобразование в массив numpy за одну операцию:

final = []

# x is some generator
for item in x:
    final.append(x)

A = np.array(x)

Или, что более элегантно, с учетом генератора x:

A = np.array(list(x))

Это решение экономит время, но неэффективно с памятью.

Известное количество строк

Операции добавления на numpy массивах дороги и не рекомендуются.Если вы заранее знаете размер конечного массива, вы можете создать пустой (или нулевой) массив нужного вам размера, а затем заполнить его значениями.Например:

A = np.zeros((10, 2))
A[0] = [1, 2]

Или в цикле, с тривиальным присваиванием для демонстрации синтаксиса:

A = np.zeros((2, 2))

# in reality, x will be some generator whose length you know in advance
x = [[1, 2], [3, 4]]

for idx, item in enumerate(x):
    A[idx] = item

print(A)

array([[ 1.,  2.],
       [ 3.,  4.]])
...