关于将一个数组放入矩阵的广播错误

时间:2018-03-15 01:43:38

标签: python numpy scipy

我定义了一个二维数组如下:

predict_result = np.zeros((69,1000)) 

在循环中,我试图将预测的一维数组注入其中。

for ij in range(0,1000):
    # # some code to generate Ypredict
    predict_result[:,ij]=Ypredict

Ypredict始终是(69,1)的形状。但是,运行该程序会出现以下错误

  

predict_result [:,ij] = Ypredict ValueError:无法广播输入   从形状(69,1)到形状(69)的阵列

如何更正此错误?

2 个答案:

答案 0 :(得分:1)

将(69,1)数组更改为(69,),或者创建接收槽(69,1)

ravel是几种展平二维数组的方法之一:

predict_result[:,ij]=Ypredict.ravel()

带有列表而不是标量的索引以另一种方式工作:

predict_result[:,[ij]]=Ypredict

你也可以使用广播将较小的数组放入较大的数组而不需要循环 - 如另一个答案中所述:

(69,1000) <= (69,1)  works

广播的两个基本规则:

  • 可以在开头添加尺寸1尺寸以匹配尺寸数

  • 可以更改所有尺寸1尺寸以匹配其他阵列的相同尺寸。

(69,)无法更改为匹配(69,1)。但是(69,1)可以改为匹配(69,1000)。

答案 1 :(得分:-2)

您不需要for-loop:

predict_result[:] = Ypredict

或者您可以按repeat创建结果:

np.repeat(Ypredict, 1000, axis=1)