将数据添加到 numpy 数组的新维度

Adding data into new dimension of numpy array

我有一个大小为 55 x 10 x 10 的 numpy 数组,它代表 55 个 10 x 10 灰度图像。我试图通过将 10 x 10 图像复制 3 次来使它们成为 RGB。

据我了解,我首先需要添加一个新维度来容纳重复的数据。我使用以下方法完成了此操作:

array_4d = np.expand_dims(array_3d, 1),

所以我现在有一个 55 x 1 x 10 x 10 的阵列。我现在如何复制 10 x 10 图像并将它们添加回此数组?

快速编辑:最后我想要一个 55 x 3 x 10 x 10 的数组

让我们首先创建一个大小为 55x10x10

的 3d 数组
from matplotlib          import pyplot as plt
import numpy as np
original_array = np.random.randint(10,255, (55,10,10))
print(original_array.shape)
>>>(55, 10, 10)

数组中第一张图片的视觉效果:

first_img = original_array[0,:,:]
print(first_img.shape)
plt.imshow(first_img, cmap='gray')
>>>(10, 10)

现在您只需一步即可得到您想要的数组。

stacked_img = np.stack(3*(original_array,), axis=1)
print(stacked_img.shape)
>>>(55, 3, 10, 10)

如果你想要最后一个频道,请使用axis=-1

现在让我们验证值是否正确,方法是从此数组中提取第一张图像并取 3 个通道的平均值:

new_img = stacked_img[0,:,:,:]
print(new_img.shape)
>>> (3, 10, 10)

new_img_mean = new_img.mean(axis=0)
print(new_img_mean.shape)
>>> (10, 10)

np.allclose(new_img_mean, first_img) # If this is True then the two arrays are same
>>> True

对于视觉验证,您必须将频道移到最后,因为那是matplotlib 需要的。这是一个 3 通道图像,所以我们这里没有使用 cmap='gray'

print(np.moveaxis(new_img, 0, -1).shape)
plt.imshow(np.moveaxis(new_img, 0, -1))
>>> (10, 10, 3)