numpy.dot维度不匹配问题求助:shapes (4,)与(1008,4)无法对齐
解决numpy.dot维度不匹配的ValueError问题
错误原因
你遇到的ValueError是因为np.dot的参数维度不兼容:
population[1]是形状为(4,)的一维权重向量,即使做转置(.T),numpy里一维数组的形状也不会改变,依旧是(4,)returns是形状为(1008,4)的二维数组,对应1008个日期的4只资产收益np.dot要求第一个参数的最后一维长度等于第二个参数的倒数第二维长度,这里4≠1008,所以触发维度不匹配错误。
解决方案
如果你的需求是计算每个日期的资产组合加权收益(对单日的4只资产收益用权重求和),只需要调换dot的参数顺序:
print(np.dot(returns, population[1]))
此时returns(1008行4列)和population[1](4元素一维向量)做点积,符合(m,n)·(n,) → (m,)的运算规则,最终会得到一个长度为1008的数组,每个元素对应单日的组合收益。
可选方案(保留参数顺序的写法)
如果一定要维持原参数顺序,可以把权重向量转为二维行数组,同时转置returns:
print(np.dot(population[1].reshape(1,4), returns.T))
这样population[1]被转为(1,4)的行向量,returns.T是(4,1008)的转置数组,点积后得到(1,1008)的二维数组,数值和上面的方案一致,只是形状不同。
内容的提问来源于stack exchange,提问作者Charles Paulinus
相关产品推荐
相关产品推荐

