Создать матрицу в цикле с numpy

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

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

я получил

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

Что для этого лучше всего?

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

Не редактируйте вопрос, чтобы аннулировать существующие ответы. Если у вас есть другой вопрос, задайте новый вопрос.

user3956566 26.05.2018 10:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
1
10 685
1

Ответы 1

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

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

user3956566 26.05.2018 10:50

Другие вопросы по теме