[英]Python: How can I reshape 3D Images (np array) to 1D and then reshape them back correctly to 3D?
[英]How can I reverse .reshape() and get back to a 3D array?
我有一个形状数据集(256、180、360)。 我将其重塑为 2D,删除了 0 值,并使用以下方法应用 PCA:
data = data.reshape(data.shape[0], data.shape[1] * data.shape[2]).T
data = data[~np.all(data == 0, axis = 1)]
# Dataset is now of shape (27719, 256)
data = StandardScaler().fit_transform(data)
pca = PCA()
transformed = pca.fit_transform(data)
现在,下一步是将转换后的数据集重新整形为 3D 和 plot PCA 结果。 我试过了:
transformed.reshape(360, 180, 256)
这给了我错误“无法将大小为 7096064 的数组重塑为形状 (360,180,256)”。 我知道我无法恢复到原始形状,因为我删除了改变形状的 0 值,当然,但我尝试了其他变体以及使用变体的变体,但我无法将其恢复到 3D(不一定是确切的尺寸和以前一样)。 有什么建议吗?
你不能。
在这种情况下,您可以做的是不使用fit_transform
,而是使用两个单独的管道。 一种使用fit
在删除了所有零条目的数据集上进行训练,然后在原始数据集上使用transform
来获取转换后的数据。
flat_data = data.reshape(data.shape[0], data.shape[1] * data.shape[2]).T
nonzero_data = flat_data[~np.all(flat_data == 0, axis = 1)]
scaler = StandardScaler()
pca = PCA()
pca.fit(scaler.fit_transform(nonzero_data))
transformed = pca.transform(scaler.transform(flat_data)).reshape(data.shape)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.