У меня есть массив, созданный с помощью numpy:
matriz = numpy.matrix([]);
Я пытаюсь вставить строки в цикле (что-то вроде):
for i in range(3) : matriz = numpy.insert(matriz, i, [i + 1, 0, 0])
Я ожидал, что результат будет:
matrix([[1, 0, 0], [2, 0, 0], [3, 0, 0]])
Однако я получаю:
matrix([[ 1., 2., 3., 0., 0., 0., 0., 0., 0.]])
Что я делаю не так?
Это происходит из-за того, что вы не указываете ось, на которую хотите добавить данные (
0
дляfilas
и1
дляcolumnas
). Если этот параметр не указан, массив/матрица сначала сглаживается , как вы можете видеть в документацииnumpy.insert()
:Правильный синтаксис будет:
Проблема в том, что вы пытаетесь добавить строку с тремя столбцами в матрицу 1x0. Это выдает ошибку. Решение может заключаться в инициализации трехстрочного, но пустого массива. Для этого мы можем использовать
numpy.empty
:В любом случае есть более эффективные способы сделать это, например:
Я указываю тип данных с помощью
dtype
, потому что если я этого не сделаю, он будет использоваться поfloat
умолчанию.В обоих случаях получаем:
Хотя первый метод (с использованием
np.insert()
) гораздо менее эффективен, чем второй (списковые включения), я получаю следующие результаты для добавления 100 000 строк:np.insert()
: 9,337375402450562 секундыlist comprehensions
: 0,07504963874816895 секунд