繁体   English   中英

如何 reverse.reshape() 并返回到 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.

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