numpy中的广播问题

时间:2019-02-04 08:57:22

标签: python numpy scikit-learn numpy-broadcasting

我正在尝试在火车上安装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。 有什么建议吗

3 个答案:

答案 0 :(得分:0)

这不是真正的答案。但是为了帮助您理解这种情况,我正在发布此信息!

MemoryMarshal.TryGetMemoryManager

上面的代码很好用!

答案 1 :(得分:0)

我试图重现您的示例,并且一切正常:

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的行上。看起来您正在对形状错误的数组进行某些操作。

答案 2 :(得分:0)

我敢打赌,如果您使用的是ipython,notebook或类似的东西,这是一个保留变量的问题。如果不是这种情况,您可以忽略此答案。

请考虑以下单元格。

enter image description here

运行这些单元格时,一切都很好。但是,如果我再次尝试运行第二个单元,则会出现此错误:

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

这是因为X_train现在是一个2735, 30矩阵,并且pca被拟合到该矩阵上,因此它期望使用n, 30矩阵。

如果您清除变量或重新组织代码以使其不适合已转换的数据,则可以解决问题。