簡體   English   中英

numpy中的廣播問題

[英]Broadcasting issues in numpy

我正在嘗試使PCA適合火車和測試數據。

X_train.shape

(2735, 219)

PCA:

pca = PCA(n_components=30)
X_train = pca.fit_transform(X_train)

測試數據:

test_values.shape
(395, 219)

轉型:

test_values = pca.transform(test_values)

錯誤:

ValueError: operands could not be broadcast together with shapes (395,219) (30,)

我不確定為什么會出現廣播錯誤,兩個numpy數組都有相同的列219。請提出任何建議

這不是真正的答案。 但是為了幫助您理解這種情況,我正在發布此信息!

import numpy as np
from sklearn.decomposition import PCA
X = np.random.randn(2735, 219)
pca = PCA(n_components=30)
pca.fit(X)

test_values = np.random.randn(395 , 219)

pca.transform(test_values)

上面的代碼可以正常工作!

我試圖重現您的示例,並且一切正常:

x_train = np.random.randint(10, size=50).reshape(10, 5)
pca = PCA(n_components=3)
print(x_train.shape)
x_train = pca.fit_transform(x_train)
test_values = np.random.randint(10, size=100).reshape(20, 5)
print(test_values.shape)
test_values = pca.transform(test_values)
print(test_values.shape)

代碼輸出:

(10, 5)
(20, 5)
(20, 3)

檢查錯誤是否出現在PCA的行上。 看起來您正在對形狀錯誤的數組進行某些操作。

我敢打賭,如果您使用的是ipython,notebook或類似的東西,這是一個保留變量的問題。 如果不是這種情況,則可以忽略此答案。

考慮以下單元格。

在此處輸入圖片說明

當我運行這些單元格時,一切都很好。 但是,如果我嘗試再次運行第二個單元,則會出現此錯誤:

ValueError: operands could not be broadcast together with shapes (395,219) (30,)

這是因為X_train現在是2735, 30矩陣,並且pca擬合在該矩陣上,因此它期望n, 30矩陣。

如果清除變量或重新組織代碼以使其不適合已轉換的數據,則可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM