簡體   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