繁体   English   中英

矩阵未对齐错误消息

[英]matrices are not aligned error message

我有以下 dataframe 的回报

ret
Out[3]: 
Symbol            FX      OGDC       PIB       WTI
Date                                              
2010-03-02  0.000443  0.006928  0.000000  0.012375
2010-03-03 -0.000690 -0.007873  0.000171  0.014824
2010-03-04 -0.001354  0.001545  0.000007 -0.008195
2010-03-05 -0.001578  0.008796 -0.000164  0.015955

以及每个符号的以下权重:

df3
Out[4]: 
  Symbol    Weight
0   OGDC  0.182022
1    WTI  0.534814
2     FX  0.131243
3    PIB  0.151921

我试图获得每天的加权回报并尝试:

port_ret = ret.dot(df3)

但我收到以下错误消息:

ValueError: matrices are not aligned

我的目标是为每个日期获得加权回报,例如 2010-03-02 如下:

weighted_ret = 0.000443*.131243+.006928*.182022+0.000*0.151921+0.012375*.534814 = 0.007937512

我不确定为什么会收到此错误,但很乐意为加权回报提供替代解决方案

权重矩阵中有两列:

df3.shape
Out[38]: (4, 2)

在该矩阵上将索引设置为Symbol以获得正确的dot

ret.dot(df3.set_index('Symbol'))
Out[39]:
              Weight
Date
2010-03-02  0.007938
2010-03-03  0.006430
2010-03-04 -0.004278
2010-03-05  0.009902

对于 dataframe dfA 与 dataframe dfB 的点积,dfA 的列名必须与 dfB 的索引一致,否则会出现错误“ValueError: matrices are not aligned”

dfA = pd.DataFrame( data = [[1, 2], [3, 4], [5, 6]], columns=['one', 'two'])
dfB = pd.DataFrame( data = [[1, 2, 3], [4, 5, 6]], index=['one', 'two'])
dfA.dot(dfB)

检查调用点积的矩阵的形状。 仅当A的第二轴与B的第一轴具有相同的大小时,才可以计算矩阵A.dot(B)的点积。
在您的示例中,您还有带有日期的列,这会破坏您的计算。 您应该在计算中摆脱它。 尝试运行port_ret = ret[:,1:].dot(df3[1:])然后检查它是否产生所需的结果。
对于将来的情况,请使用numpy.shape()函数调试矩阵计算,这确实是有用的工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM