如何在python中重塑图像的维度

如何在python中重塑图像的维度,python,numpy,tensorflow,tensorflow2.0,Python,Numpy,Tensorflow,Tensorflow2.0,假设我有训练图像X_train.shape=(32,32,31000)。这意味着有1000个图像,每个图像的大小为32x32,带有3个颜色通道。它是一个列表形式的列表。我想让它有一个形状(1000,32,32,3)。我知道我可以使用for loop手动将其更改为我想要的形状,但我想知道numpy或tensorflow中是否有任何函数可以快速轻松地完成此操作?您可以使用np.moveaxis import numpy as np X_train = np.random.rand(32, 32,

假设我有训练图像
X_train.shape
=(32,32,31000)。这意味着有1000个图像,每个图像的大小为32x32,带有3个颜色通道。它是一个列表形式的列表。我想让它有一个形状(1000,32,32,3)。我知道我可以使用for loop手动将其更改为我想要的形状,但我想知道
numpy
tensorflow
中是否有任何函数可以快速轻松地完成此操作?

您可以使用
np.moveaxis

import numpy as np

X_train = np.random.rand(32, 32, 3, 1000)
print(X_train.shape)

X_train_new = np.moveaxis(X_train, 3, 0)
print(X_train_new.shape)
这里3-源索引,0-目标索引

输出

(32, 32, 3, 1000)
(1000, 32, 32, 3)

如果是列表列表,首先将其转换为numpy数组或张量:

使用numpy:

X_train = np.array(X_train)
X_train = np.reshape(X_train, (1000, 32, 32, 3))
使用TensorFlow:

X_train = tf.cast(X_train, dtype=tf.float32)
X_train = tf.reshape(X_train, shape=(1000, 32, 32, 3))

您可以使用
np.einsum

>>> X_train_new = np.einsum('ijkl->lijk',X_train)
>>> X_train.shape
(32, 32, 3, 1000)
>>> X_train_new.shape
(1000, 32, 32, 3)

不,我相信他们不是在谈论我的问题