繁体   English   中英

重塑 numpy 图像数组会导致额外的维度

[英]Reshaping numpy array of images results in extra dimension

我有 440 张相同大小的 924 x 640 和三个通道的图像。 我通过加载它们

image_data = []
for filename in iglob(os.path.join(store, '*.jpg')):
    image_data.append(plt.imread(filename))

然后我从这个列表中创建一个 numpy ndarray:

image_np_orig = np.array(image_data)

这个数组的形状为(440,) ,它由形状为(924, 640, 3)的元素组成。 我想对这个图像数组进行一些 t-SNE 转换,所以我想重塑数组以使其形状看起来像(440, 1)

image_np = image_np_orig.reshape(image_np_orig.shape[0], -1)

期望/现实

我希望看到一个形状为(440, 1)的数组image_np ,其中第一维 ( axis=0 ) 的每个元素都是一个形状为(924, 640, 3)的数组。 但是我得到了一个形状为(440, 1)的数组image_np ,其中第一维的每个元素都是一个形状为(1,)数组,在这些数组中,它们各自第一维的每个元素的形状为(924, 640, 3)

我试过的

我试过了

image_np = image_np_orig[:, np.newaxis]

结果相同。

我也试过

image_np = np.stack(image_np_orig)

这导致image_np的形状为(440, 924, 640, 3)然后我在 t-SNE 变换过程中遇到了错误:

from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, init='pca')
X_tsne = tsne.fit_transform(image_np)

返回ValueError: Found array with dim 4. Estimator expected <=2.

可能相关

image_np_orig具有image_np_orig object并且image_np_orig[0]具有image_np_orig[0] uint8可能是相关的。 如果这是相关的,那么我如何重塑不同类型的数组?

据我了解,您有一个形状数组(440, 1, 924, 640, 3) ,但您实际上需要(440, 924, 640, 3)

尝试:

image_np = image_np_orig.squeeze()

这将挤出不需要的维度。

我不确定为什么第一种方法对您不起作用。 但由于image_np = np.stack(image_np_orig)返回4D数据,您可以从那里开始:

image_np = np.stack(image_np_orig).reshape(len(image_np_orig), -1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM