【问题标题】:Padding large numpy arrays填充大型 numpy 数组
【发布时间】:2013-04-10 09:38:16
【问题描述】:

另一个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. 方式)。

【问题讨论】:

  • 您可以先使用填充数组吗?
  • @JanneKarila :我不知道如何从填充数组开始?我有原始数据,在某些时候我必须填充它吗?
  • 如何将原始数据放入 NumPy 数组中?也许您可以在那时将其读入填充内的切片中。
  • @JanneKarila 我可以这样做,但我需要在之前将 Padding 创建为数组,这需要大量时间和内存(例如 np.ones(2000,2000,2000) 几乎需要4 秒)
  • 您可以使用 np.empty 和切片分配来设置填充,而不是 np.ones。

标签: python numpy


【解决方案1】:

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

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]

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 2016-11-06
    • 1970-01-01
    • 2022-01-05
    • 2018-10-05
    • 2017-10-24
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    相关资源
    最近更新 更多