You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用np.dot计算组合年化收益未得预期结果的问题排查

问题排查与解决

核心错误原因

你犯了一个基础语法错误:把np.dot当成变量做赋值操作,而非调用这个点积计算函数。你的代码里写的是:

np.dot = (annual_returns, weights)

这行代码没有执行点积计算,而是把np.dot这个函数名重新赋值成了包含annual_returns和weights的元组,所以输出的就是这个元组的内容,自然得不到预期的加权平均结果。

正确写法

要计算点积,必须用函数调用的语法,将两个数组作为参数传入np.dot:

portfolio_return = np.dot(annual_returns, weights)
print(portfolio_return)

完整修正后的代码

import numpy as np
import pandas as pd
from pandas_datareader import data as pdr
import matplotlib.pyplot as plt
import yfinance as yf
yf.pdr_override()
y_symbols = ['PG','MSFT', 'F', 'GE']
from datetime import datetime
startdate = datetime(1995,1,3)
enddate = datetime(2017,3,24)
data = pdr.get_data_yahoo(y_symbols, start =startdate, end =enddate)['Adj Close']

returns = (data/data.shift(1)) - 1

annual_returns = returns.mean() * 252
print(annual_returns)

weights = np.array([0.4, 0.4, 0.15, 0.05])
# 正确调用np.dot计算组合年化收益
portfolio_return = np.dot(annual_returns, weights)
print("组合年化收益率:", portfolio_return)

额外说明

  • annual_returns是pandas的Series对象,np.dot可以直接和numpy数组计算点积,Series会自动转换为兼容的数组格式。
  • 执行修正后的代码后,会得到一个单个浮点数,也就是投资组合的加权平均年化收益率。

内容的提问来源于stack exchange,提问作者OT2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:25:14