Я хотел бы создать матрицу numpy, используя строки, которые я получаю в цикле. Но как мне инициализировать матрицу? Если я напишу
A = []
A = numpy.vstack((A, [1, 2]))
я получил
ValueError: все размеры входного массива, кроме оси конкатенации, должны точно совпадать
Что для этого лучше всего?
ПРИМЕЧАНИЕ: я не знаю заранее количество рядов. Количество столбцов известно.






Неизвестное количество строк
Один из способов - сформировать список списков, а затем преобразовать его в массив 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.]])
Вы приложили усилия, чтобы ответить на этот вопрос. OP не имеет права редактировать исходный вопрос, чтобы аннулировать этот ответ. Если он редактируется, поднимите флаг мода.
Не редактируйте вопрос, чтобы аннулировать существующие ответы. Если у вас есть другой вопрос, задайте новый вопрос.