![](/img/trans.png)
[英]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.