小编典典

如何在Numpy中就地扩展数组?

python

目前,我有一些这样的代码

import numpy as np
ret = np.array([])
for i in range(100000):
  tmp =  get_input(i)
  ret = np.append(ret, np.zeros(len(tmp)))
  ret = np.append(ret, np.ones(fixed_length))

我认为此代码 效率不高, 因为np.append需要返回数组的副本而不是 就地修改ret

我想知道是否可以将extendnumpy数组用于以下代码:

import numpy as np
from somewhere import np_extend
ret = np.array([])
for i in range(100000):
  tmp =  get_input(i)
  np_extend(ret, np.zeros(len(tmp)))
  np_extend(ret, np.ones(fixed_length))

这样,extend效率会更高。有人对此有想法吗?谢谢!


阅读 451

收藏
2020-12-20

共1个答案

小编典典

想象一个numpy数组占据一个连续的内存块。现在想象一下其他对象,例如其他numpy数组,它们正占据着numpy数组左右两侧的内存。没有空间可以追加或扩展我们的numpy数组。numpy数组中的基础数据始终占用
连续 的内存块。

因此,任何追加或扩展numpy数组的请求都只能通过分配一个更大的全新内存块,将旧数据复制到新块中,然后追加或扩展来满足。

所以:

  1. 它不会就地发生。
  2. 效率不高。
2020-12-20