Python 将[28,28,2]matlab数组转换为[2,28,28,1]张量

Python 将[28,28,2]matlab数组转换为[2,28,28,1]张量,python,matlab,tensorflow,tensor,Python,Matlab,Tensorflow,Tensor,我正在学习tensorflow。在完成expert()的tensorflow教程MNist之后,我尝试使用经过训练的模型来运行推理 我制作了两幅[28x28]图像,将它们放入[28x28x2]数组中,并保存了Matlab文件 然后我使用scipy.io将数组加载到python中 但是,我的网络需要一个[2,28,28,1]张量 如何将[28x28x2]数组转换为[2,28,28,1]张量 首先,转置阵列,使28x28x2变为2x28x28 (第三维度先出现,然后是第一维度,然后是第二维度) 注

我正在学习
tensorflow
。在完成expert()的
tensorflow
教程
MNist
之后,我尝试使用经过训练的模型来运行推理

  • 我制作了两幅
    [28x28]
    图像,将它们放入
    [28x28x2]
    数组中,并保存了
    Matlab
    文件

  • 然后我使用
    scipy.io
    将数组加载到
    python

    但是,我的网络需要一个
    [2,28,28,1]
    张量

    如何将
    [28x28x2]
    数组转换为
    [2,28,28,1]
    张量


首先,转置阵列,使28x28x2变为2x28x28 (第三维度先出现,然后是第一维度,然后是第二维度)

注意:您可以使用
arr.reforme((2,28,28))
获得2x28x28形状,但这会打乱数据的顺序。我使用了
transpose
,因为我相信您希望
arr[0]
成为一张图片,而
arr[1]
也是如此

然后展开数组,以获得最后一个维度

arr = np.expand_dims(arr, -1)
使用4x4而不是28x28的示例:

现在是转换

>>> arr = arr.transpose((2, 0, 1))
>>> arr = np.expand_dims(arr, -1)
>>> arr.shape
(2, 4, 4, 1)

试图使问题更具可读性,并强调迄今为止采取的要点/步骤。试着让你的帖子可读,这样你就可以得到正确的回复,而不是下载。你可以在MATLAB中创建数组,然后在Python中使用它。您想在MATLAB或Python中进行此转换吗?请具体说明,并适当标记您的问题。
>>> arr = np.empty((4, 4, 2))  # an empty array
>>> arr[..., :] = 0, 1  # first picture is all 0s and second is all 1s
>>> arr[..., 0]
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> arr[..., 1]
array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])
>>> arr.shape
(4, 4, 2)
>>> arr = arr.transpose((2, 0, 1))
>>> arr = np.expand_dims(arr, -1)
>>> arr.shape
(2, 4, 4, 1)