假设我有训练图像X_train.shape
=(32,32,3,1000)。这意味着有1000张图片,每张图片大小为32x32,有3个颜色通道。它是列表的列表形式。我想让它有一个形状(1000,32,32,3)。我知道我可以使用for循环手动将其更改为我想要的形状,但我想知道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)
如果是list的list,首先将其转换为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)