Python:如何将 3D 图像(np 数组)重塑为 1D,然后将它们正确重塑回 3D?

问题描述 投票:0回答:3

我将 RGB 图像 (32 x 32 x 3) 保存为 3D numpy 数组,将其用作神经网络的输入(使用张量流)。为了将它们用作输入,我使用 reshape(1,-1) 将它们重塑为 1D np 数组 (1 x 3072)。当我完成网络训练后,我想将输出重新整形,但使用 reshape(32,32,3) 似乎无法提供所需的结果。

这是正确的方法吗?我如何才能确保每个数据都会回到正确的位置?

python arrays numpy image-processing tensorflow
3个回答
11
投票

如果您要创建一维数组,请使用 .reshape(-1),它将创建数组的线性版本。如果您使用 .reshape(32,32,3),这将创建一个 32 个 32×3 数组的数组,这是所描述的原始格式。使用“-1”创建一个与组合嵌套数组中元素数量相同大小的线性数组。


2
投票

如果

M
(32 x 32 x 3)
,那么
.reshape(1,-1)
将生成形状为
(1, 32*32*3)
的 2d 数组(不是 1d)。 可以使用相同类型的
reshape
语句将其重新整形回 (32,32,3)。

但这正在重塑输入和输出但你还没有告诉我们你的网络的输出是什么样的。 它有什么形状? 您如何尝试重塑输出,它有什么问题?


0
投票

通过使用

ravel()
您还可以将任何
"nD"
数组转换为
1D
数组。

示例:

import numpy as np

arr = np.arange(27).reshape((3, 3, 3))
print(arr)
print("\n")
print(arr.ravel()) <--- here we have used ravel()

输出:

[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]


[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 24 25 26]
© www.soinside.com 2019 - 2024. All rights reserved.