numpy使用填充调整n维数组的大小



我有两个数组,ab

a具有形状(1, 2, 3, 4)

b具有形状(4, 3, 2, 1)

我想让他们两个都是(4, 3, 3, 4),新的职位用0来填补。

我可以做:

new_shape = (4, 3, 3, 4)
a = np.resize(a, new_shape)
b = np.resize(b, new_shape)

但这重复了每个元素的元素以形成新的元素,这对我来说不起作用

相反,我认为我可以做:

a = a.resize(new_shape)
b = b.resize(new_shape)

根据文档,其具有0。

但它不适用于多维数组,引发错误:

ValueError:调整大小仅适用于单段数组

那么有不同的方法来实现这一点吗?即,与np.resize相同,但有0填充?

注意:我只是在寻找纯粹的numpy解决方案

编辑:我使用的是numpy版本1.20.2

编辑:我刚刚发现is适用于数字,但不适用于对象,我忘了提到它是一个对象数组,而不是数字

resize方法在平坦意义上用0填充;带有重复的功能垫。

为了说明CCD_;使"变平";填充前:

In [108]: a = np.arange(12).reshape(1,4,3)
In [109]: a
Out[109]: 
array([[[ 0,  1,  2],
[ 3,  4,  5],
[ 6,  7,  8],
[ 9, 10, 11]]])
In [110]: a1 = a.copy()
In [111]: a1.resize((2,4,4))
In [112]: a1
Out[112]: 
array([[[ 0,  1,  2,  3],
[ 4,  5,  6,  7],
[ 8,  9, 10, 11],
[ 0,  0,  0,  0]],
[[ 0,  0,  0,  0],
[ 0,  0,  0,  0],
[ 0,  0,  0,  0],
[ 0,  0,  0,  0]]])

相反,如果我制作一个正确形状的目标数组,并进行复制,我可以保持原始的多维块:

In [114]: res = np.zeros((2,4,4),a.dtype)
In [115]: res[:a.shape[0],:a.shape[1],:a.shape[2]]=a
In [116]: res
Out[116]: 
array([[[ 0,  1,  2,  0],
[ 3,  4,  5,  0],
[ 6,  7,  8,  0],
[ 9, 10, 11,  0]],
[[ 0,  0,  0,  0],
[ 0,  0,  0,  0],
[ 0,  0,  0,  0],
[ 0,  0,  0,  0]]])

我把切片写得很清楚(为了清楚起见(。如果需要,可以通过编程方式创建这样的元组。

最新更新