[英]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.