有没有办法将 numpy.ndarray 的每个条目包装到一个单独的数组中?

Is there a way to wrap every single entry of an numpy.ndarray into a separate array?

我在将数组设置为正确的形状以将其用作卷积神经网络的输入时遇到了一些问题:

我的数组的形状是 (100,64,64),但我需要它是 (100,64,64,1)。我意识到它看起来有点奇怪,但我基本上想将每个条目打包到一个单独的数组中。

一个简化的示例,使用二维数组,其中类似的是从 (3,3)(3,3,1):

[[0,1,0],        [[[0],[1],[0]],
 [1,1,1],         [[1],[1],[1]],
 [0,0,1]]         [[0],[0],[1]]]

有没有使用 numpy 的便捷方法?

我试过使用函数 numpy.reshape:我知道如何“添加”另一个包含原始数组的数组。

import numpy as np

data = data.reshape((1,)+data.shape)

这给出了 data.shape 的输出:(1,100,64,64)。 有没有办法在“内端”添加维度?

如果我尝试 data.reshape(data.shape+(,1)),我会收到无效的语法错误。

您可以使用以下方法重塑形状:

a[:,:,None]

或者,以编程方式(适用于任意数量的维度):

a.reshape((*a.shape,1))

例子

a = np.array([[0,1,0],
              [1,1,1],
              [0,0,1]])

# array([[0, 1, 0],
#        [1, 1, 1],
#        [0, 0, 1]])


a[:,:,None]  # or a.reshape((*a.shape,1))

# array([[[0], [1], [0]],
#        [[1], [1], [1]],
#        [[0], [0], [1]]])

您可以将 EllipsisNone 传递给数组索引器:

>>> a
array([[0, 1, 0],
       [1, 1, 1],
       [0, 0, 1]])

>>> a[..., None]
array([[[0],
        [1],
        [0]],

       [[1],
        [1],
        [1]],

       [[0],
        [0],
        [1]]])

(归功于

docs points out一样,当形状和你的兼容时,你也可以直接改变数组的形状:

a = np.array([
    [0, 1, 0],
    [1, 1, 1],
    [0, 0, 1]
])

a.shape += (1,)
a

# array([[[0], [1], [0]],
#        [[1], [1], [1]],
#        [[0], [0], [1]]])