Предварительное распределение выделяет всю память, которая вам нужна, за один вызов, в то время как изменение размера массива (с помощью вызовов для добавления, вставки, объединения или изменения размера) может потребовать копирования массива в больший блок памяти.Таким образом, вы правы, предварительное выделение предпочтительнее (и должно быть быстрее) изменения размера.
Существует несколько «предпочтительных» способов предварительного выделения пустых массивов в зависимости от того, что вы хотите создать.Существует np.zeros
, np.ones
, np.empty
, np.zeros_like
, np.ones_like
и np.empty_like
и многие другие, которые создают полезные массивы, такие как np.linspace
и np.arange
.
Так что
ar0 = np.linspace(10, 20, 16).reshape(4, 4)
просто отлично, если это ближе всего к желаемому ar0
.
Однако, чтобы сделать последний столбец со всеми 1, я думаю, что предпочтительным способом было быпросто скажите
ar0[:,-1]=1
Поскольку форма ar0[:,-1]
равна (4,)
, значение 1 транслируется для соответствия этой форме.