Изменение размера массива numpy на лету

#python #numpy

#python #numpy

Вопрос:

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

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

 pi = np.empty((0))

for...
    if...
        np.concatenate([pi, np.array([0])]) # supposed to ad a new column with entry '0'
 

Однако print(pi) возвращает []

Я подозреваю, что в этом могут быть виноваты мои ограниченные знания numpy, хотя я не могу обнаружить никаких очевидных ошибок.

Кроме того, поскольку мне нужно работать со значениями в массиве внутри цикла, я, к сожалению, не могу дождаться его инициализации до завершения цикла

Комментарии:

1. Вы должны присвоить результат np.concatenate to pi .

2. Не пытайтесь имитировать список [] и append с массивами! Как вы обнаружили, он подвержен ошибкам, а также медленный.

3. Keepi concatenate создает новый массив, копируя значения во входные массивы. По мере роста объем копирования растет. Список append работает на месте, просто добавляя ссылку на список. Это проще и быстрее.

Ответ №1:

Вы не присваиваете новый массив pi.

 pi = np.empty((0))

for...
    if...
        pi = np.concatenate([pi, np.array([0])])