Используя стандартные массивы Python, я могу сделать следующее:
arr = []
arr.append([1,2,3])
arr.append([4,5,6])
# arr is now [[1,2,3],[4,5,6]]
Тем не менее, я не могу сделать то же самое в NumPy. Например:
arr = np.array([])
arr = np.append(arr, np.array([1,2,3]))
arr = np.append(arr, np.array([4,5,6]))
# arr is now [1,2,3,4,5,6]
Я тоже посмотрел vstack
, но когда я используюvstack
пустой массив, я получаю:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Итак, как мне добавить новую строку в пустой массив в NumPy?
Ответы:
Способ «запустить» нужный вам массив:
Который является пустым массивом, но имеет правильную размерность.
Затем обязательно добавьте вдоль оси 0:
Но @jonrsharpe прав. На самом деле, если вы собираетесь добавлять в цикл, было бы гораздо быстрее добавить список, как в первом примере, а затем преобразовать в массив с пустыми значениями в конце, поскольку вы на самом деле не используете numpy как предназначен во время цикла:
Numpythonic способ сделать это зависит от вашего приложения, но это будет больше похоже на:
источник
a = a[:N]
Хотя я твердо верю, что вы должны найти способ векторизовать его (напишите новый вопрос со своей спецификой, если вам нужна помощь) или просто использовать списки, пока цикл не закончится.Вот мое решение:
источник
В этом случае вы можете использовать функции np.hstack и np.vstack
Вы также можете использовать функцию np.concatenate.
ура
источник
используя собственное определение dtype, у меня сработало следующее:
источник
В случае добавления новых строк для массива в цикле, присвойте массив непосредственно в первый раз в цикле вместо инициализации пустого массива.
Это в основном полезно, когда форма массива неизвестна
источник
Я хочу сделать цикл for, но с методом askewchan он не работает, поэтому я изменил его.
источник