在结构化数组上使用np.pad()

时间:2020-02-26 19:14:40

标签: python numpy

另一个post确实可以满足我的要求,但是我似乎无法在结构化数组上实现。

说我有一个像这样的数组:

>>> arr = np.empty(2, dtype=np.dtype([('xy', np.float32, (2, 2))]))
>>> arr['xy']
array([[[1., 1.],
        [2., 2.]],

        [3., 3.],
        [4., 4.]]], dtype=float32)

我需要填充它,以便每个子数组的最后一行重复特定的次数:

arr['xy'] = np.pad(arr['xy'], [(0, 0), (0, 2), (0, 0)], mode='edge')

但是我遇到ValueError:

ValueError: could not broadcast input array from shape (2, 4, 2) into shape (2, 2, 2)

因此,在没有结构化数组的情况下,我尝试了以下操作:

>>> arr = np.array([[[1, 1], [2, 2]], [[3, 3], [4, 4]]])
>>> arr
array([[[1, 1],
        [2, 2]],

        [3, 3],
        [4, 4]]], dtype=float32)
>>> arr = np.pad(arr, [(0, 0), (0, 2), (0, 0)], mode='edge')
>>> arr
array([[[1, 1],
        [2, 2],
        [2, 2],
        [2, 2]],

        [3, 3],
        [4, 4],
        [4, 4],
        [4, 4]], dtype=float32)

为什么不能重复使用结构化数组?

1 个答案:

答案 0 :(得分:2)

您的填充有效,是ar [“ xy”]的赋值失败,您无法更改结构的形状。

# Get actual articles for each author
query {
  authors {
    id
    name
    owned_articles {
      id
      title
    }
  }
}