Ответ 1
Preallocation изменяет всю необходимую вам память за один вызов, в то время как изменение размера массива (посредством вызовов для добавления, вставки, конкатенации или изменения размера) может потребовать копирования массива в больший блок памяти. Итак, вы правы, предпочтение предпочтительнее (и должно быть быстрее).
Существует несколько "предпочтительных" способов предопределения массивов numpy в зависимости от того, что вы хотите создать. Существуют 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 является в эфир, чтобы соответствовать этой форме.