python - 填充大型 numpy 数组

标签 python numpy

另一个 numpy 数组处理问题: 我有一个大约。 2000³ 个条目 numpy 数组,大小固定(据我所知),包含整数。我想用另一个整数填充数组,以便它在所有维度上都被包围。这个整数在整个填充过程中是固定的。

example (2D)
1----->000
       010
       000

我有两个想法,导致了这个结果:

  1. 创建一个更大的 numpy 数组,包含填充值并“切片”填充值中的旧区域:

    padded=np.zeros((z+2,x+2,y+2))
    padded[1:z+1,1:x+1,1:y+1]=olddata
    
  2. 使用 np.insert 或 hstack,vstack,dstack 添加值:

    padded=np.insert(data,0,0,axis=0)
    padded=np.insert(data,x+1,0,axis=0) etc.
    

问题是,所有这些方法都不是就地分配新数组 (1.) 或复制旧数组 (2.)。有没有办法就地填充?我知道,从 numpy 1.7 开始。有 numpy.pad 模块。但这似乎也使用了某种分配和覆盖(就像我的 1. 方式)。

最佳答案

您不能就地添加填充,因为内存布局中没有空间。不过,您可以采用另一种方式:首先分配填充的数组,然后在访问未填充的数据时使用其中的 View 。

padded = np.empty((2002,2002,2002))
padded[0] = 0
padded[-1] = 0
padded[:,0] = 0
padded[:,-1] = 0
padded[:,:,0] = 0
padded[:,:,-1] = 0

unpadded = padded[1:-1, 1:-1, 1:-1]

关于python - 填充大型 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15922203/

相关文章:

python - 为什么对列表的操作比对 numpy 数组的操作慢

python - 如何将字典中的所有列表数字转为零

python - Python openCV 中的实时人体检测

python - 如果不包含在另一个列表中,则从数据框中的列表项中删除元素的优雅方法

python - Numpy 选择 : shape-mismatch error

python - 将两个高斯/正态分布的混合拟合到一组数据中的直方图,python

python - 将额外的构造函数参数传递给 MXNet 中的自定义层

python - 使用 networkx 进行定向网络和边缘权重

python - 用列表理解替换 nan

python - 返回列表中最后一个非零元素的索引