预分配NumPy数组的首选方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (27)

我是NumPy/SciPy的新手。从文档中看,预先分配一个数组似乎比调用append/INSERT/concatenate更有效。

例如,要将1的列添加到数组中,我认为:

ar0 = np.linspace(10, 20, 16).reshape(4, 4)
ar0[:,-1] = np.ones_like(ar0[:,0])

优先于此:

ar0 = np.linspace(10, 20, 12).reshape(4, 3)
ar0 = np.insert(ar0, ar0.shape[1], np.ones_like(ar0[:,0]), axis=1)

我的第一个问题是这是否正确(第一个问题更好),我的第二个问题是,目前我只是像这样预先分配我的数组(我在SciPy站点上的几个烹饪手册示例中注意到了这一点):

np.zeros((8,5))

什么是“NumPy-preferred”的方式来做这件事?

提问于
用户回答回答于

在一个调用中,预分配错误将您所需的所有内存,而调整数组大小(通过调用追加、插入、连接或调整大小)时,可能需要将数组复制到更大的内存块中。因此,您是正确的,预分配比(并且应该比)调整大小更好。

根据您想要创建的内容,有许多预先分配numpy数组的“首选”方法。有np.zerosnp.onesnp.emptynp.zeros_likenp.ones_like,和np.empty_like,以及创建有用数组的许多其他数组,如np.linspace,和np.arange.

所以

ar0 = np.linspace(10, 20, 16).reshape(4, 4)

要把最后一列写成1,我想最好的方法就是说。

ar0[:,-1]=1

扫码关注云+社区