手把手教你实现法玛三因子模型

news2024/11/25 2:48:38

数量技术宅团队在CSDN学院推出了量化投资系列课程

欢迎有兴趣系统学习量化投资的同学,点击下方链接报名:

量化投资速成营(入门课程)

Python股票量化投资

Python期货量化投资

Python数字货币量化投资

C++语言CTP期货交易系统开发

数字货币JavaScript语言量化交易系统开发


关于法玛三因子模型

法玛三因子模型(Fama-French Three-Factor Model)是一种资本资产定价模型(Capital Asset Pricing Model,CAPM)的扩展,用于解释股票回报的变异性。该模型由尤金·法玛(Eugene Fama)和肯尼斯·法rench(Kenneth French)于1992年提出。

该模型考虑了三个因子对股票回报的影响:市场风险因子、市值因子和价值因子。市场风险因子指的是股票市场整体的风险,可以用市场指数来代表。市值因子是指公司的市值大小,可以用市值指数来代表。价值因子是指公司的估值水平,可以用账面市值比(B/M)来代表。这三个因子被认为是影响股票回报的重要因素。

法玛三因子模型认为,股票的预期回报可以通过以下公式计算:

E(Ri) = Rf + βi(Market Risk Premium) + si(SMB) + hi(HML)

其中,E(Ri)表示股票i的预期回报,Rf表示无风险收益率,βi表示股票i的市场风险系数,Market Risk Premium表示市场风险因子的回报率减去无风险收益率,si表示股票i的市值因子系数,SMB表示市值因子的超额回报,hi表示股票i的价值因子系数,HML表示价值因子的超额回报。

通过考虑市值和价值因子,法玛三因子模型可以更好地解释股票回报的变异性。该模型被广泛应用于投资组合管理、风险管理和资产定价等领域。

Python代码实现

由于上述模型需要使用股票的市值和账面市值比等数据,我们需要先获取这些数据。以下是一种获取中国股票市值和账面市值比数据的方法:

import pandas as pd
import tushare as ts

# 获取股票列表
stock_list = ts.get_stock_basics().index.tolist()

# 获取股票市值数据
market_cap = ts.get_stock_basics().loc[:, 'totalAssets']

# 获取股票账面市值比数据
book_to_market = ts.get_stock_basics().loc[:, 'bvps'] / ts.get_stock_basics().loc[:, 'pb']

# 将市值和账面市值比数据合并到一个DataFrame中
data = pd.concat([market_cap, book_to_market], axis=1)
data.columns = ['market_cap', 'book_to_market']
data.index.name = 'code'
data = data.dropna()

接下来,我们可以使用以上获取的市值和账面市值比数据,以及股票收益率数据,来实现法玛三因子模型的计算。以下是一个简单的实现:

import numpy as np
import statsmodels.api as sm

# 获取股票收益率数据
start_date = '2020-01-01'
end_date = '2020-12-31'
return_data = pd.DataFrame()
for code in stock_list:
    try:
        stock_return = ts.pro_bar(ts_code=code, start_date=start_date, end_date=end_date, adj='qfq', 
                                   factors=['tor']).set_index('trade_date')['pct_chg']
        return_data[code] = stock_return
    except:
        pass

# 计算市场指数收益率
market_return = ts.pro_bar(ts_code='000001.SH', start_date=start_date, end_date=end_date, 
                           adj='qfq', factors=['tor']).set_index('trade_date')['pct_chg']
market_return.name = 'market_return'

# 将股票收益率和市场指数收益率合并到一个DataFrame中
data = pd.concat([return_data, market_return], axis=1)
data = data.dropna()

# 计算超额收益率
data = data.sub(data['market_return'], axis=0)

# 将市值和账面市值比数据合并到一个DataFrame中
data = pd.concat([data, market_cap, book_to_market], axis=1)
data.columns = stock_list + ['market_return', 'market_cap', 'book_to_market']

# 计算因子收益率
factor_data = pd.DataFrame()
factor_data['market_factor'] = market_return - ts.pro_bar(ts_code='000016.SH', start_date=start_date, 
                                                          end_date=end_date, adj='qfq', 
                                                          factors=['tor']).set_index('trade_date')['pct_chg']
factor_data['size_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['market_cap']))).fit().resid
factor_data['value_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['book_to_market']))).fit().resid

# 计算法玛三因子模型的参数
X = sm.add_constant(factor_data)
model = sm.OLS(np.array(data.mean()), X)
results = model.fit()
print(results.summary())

以上代码中,我们使用了tushare库获取股票数据,并使用statsmodels库进行回归分析。具体来说,我们首先获取了股票收益率、市场指数收益率、股票市值和账面市值比等数据,然后计算了超额收益率,并将这些数据合并到一个DataFrame中。接着,我们计算了市场因子、规模因子和价值因子的收益率,并利用OLS回归分析计算了法玛三因子模型的参数。

需要注意的是,以上代码只是一个简单的示例,实际应用中还需要考虑很多其他因素,如数据处理、缺失值处理、数据标准化等。此外,法玛三因子模型也有其局限性,如不能很好地解释一些股票市场现象等。因此,在实际应用中需要根据具体情况进行调整和改进。

因子有效性检验

当使用法玛三因子模型时,我们需要确认市场因子、规模因子和价值因子是否有效。以下是几种在Python中进行因子有效性检验的方法:

1 因子收益率的t检验

首先,我们可以使用t检验来检验市场因子、规模因子和价值因子的收益率是否显著不为零。我们可以通过计算每个因子收益率的t统计量,并检验其显著性水平,来判断该因子是否有效。以下是一个简单的示例:

import pandas as pd
import numpy as np
import statsmodels.api as sm

# 获取股票收益率数据
start_date = '2020-01-01'
end_date = '2020-12-31'
return_data = pd.DataFrame()
for code in stock_list:
    try:
        stock_return = ts.pro_bar(ts_code=code, start_date=start_date, end_date=end_date, adj='qfq', 
                                   factors=['tor']).set_index('trade_date')['pct_chg']
        return_data[code] = stock_return
    except:
        pass

# 计算市场指数收益率
market_return = ts.pro_bar(ts_code='000001.SH', start_date=start_date, end_date=end_date, 
                           adj='qfq', factors=['tor']).set_index('trade_date')['pct_chg']
market_return.name = 'market_return'

# 将股票收益率和市场指数收益率合并到一个DataFrame中
data = pd.concat([return_data, market_return], axis=1)
data = data.dropna()

# 计算超额收益率
data = data.sub(data['market_return'], axis=0)

# 将市值和账面市值比数据合并到一个DataFrame中
data = pd.concat([data, market_cap, book_to_market], axis=1)
data.columns = stock_list + ['market_return', 'market_cap', 'book_to_market']

# 计算因子收益率
factor_data = pd.DataFrame()
factor_data['market_factor'] = market_return - ts.pro_bar(ts_code='000016.SH', start_date=start_date, 
                                                          end_date=end_date, adj='qfq', 
                                                          factors=['tor']).set_index('trade_date')['pct_chg']
factor_data['size_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['market_cap']))).fit().resid
factor_data['value_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['book_to_market']))).fit().resid

# 计算t检验的p值
ttest = sm.stats.ttest_ind(factor_data, np.zeros(factor_data.shape), axis=0)

# 打印检验结果
print(ttest)

以上代码中,我们首先计算了每个因子的收益率,然后使用OLS回归分析计算了每个因子的残差,即每个因子收益率中的alpha值。接着,我们计算了每个因子收益率的t统计量和p值,并输出检验结果。

2 因子回归的 $R^2$ 值

除了t检验之外,我们还可以使用因子回归的 $R^2$ 值来评估市场因子、规模因子和价值因子的有效性。$R^2$ 值表示模型中因子收益率对总收益率的解释程度,值越高则说明因子对总收益率的解释程度越大。以下是一个简单的示例:

import pandas as pd
import numpy as np
import statsmodels.api as sm

# 获取股票收益率数据
start_date = '2020-01-01'
end_date = '2020-12-31'
return_data = pd.DataFrame()
for code in stock_list:
    try:
        stock_return = ts.pro_bar(ts_code=code, start_date=start_date, end_date=end_date, adj='qfq', 
                                   factors=['tor']).set_index('trade_date')['pct_chg']
        return_data[code] = stock_return
    except:
        pass

# 计算市场指数收益率
market_return = ts.pro_bar(ts_code='000001.SH', start_date=start_date, end_date=end_date, 
                           adj='qfq', factors=['tor']).set_index('trade_date')['pct_chg']
market_return.name = 'market_return'

# 将股票收益率和市场指数收益率合并到一个DataFrame中
data = pd.concat([return_data, market_return], axis=1)
data = data.dropna()

# 计算超额收益率
data = data.sub(data['market_return'], axis=0)

# 将市值和账面市值比数据合并到一个DataFrame中
data = pd.concat([data, market_cap, book_to_market], axis=1)
data.columns = stock_list + ['market_return', 'market_cap', 'book_to_market']

# 计算因子收益率
factor_data = pd.DataFrame()
factor_data['market_factor'] = market_return - ts.pro_bar(ts_code='000016.SH', start_date=start_date, 
                                                          end_date=end_date, adj='qfq', 
                                                          factors=['tor']).set_index('trade_date')['pct_chg']
factor_data['size_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['market_cap']))).fit().resid
factor_data['value_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['book_to_market']))).fit().resid

# 计算因子回归的R2值
y = data.mean()
X = sm.add_constant(factor_data)
model = sm.OLS(y, X).fit()
rsquared = model.rsquared

# 打印检验结果
print(rsquared)

以上代码中,我们首先计算了每个因子的收益率,然后使用OLS回归分析计算了每个因子的残差,即每个因子收益率中的alpha值。接着,我们将股票超额收益率和因子收益率合并到一个DataFrame中,然后计算因子回归的 $R^2$ 值。最后,我们输出了检验结果。

3 因子相关性分析

除了单独检验每个因子的有效性之外,我们还可以使用因子相关性分析来评估每个因子对投资组合表现的贡献程度。这里我们使用热图来显示每个因子之间的相关性。以下是一个简单的示例:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 获取股票收益率数据
start_date = '2020-01-01'
end_date = '2020-12-31'
return_data = pd.DataFrame()
for code in stock_list:
    try:
        stock_return = ts.pro_bar(ts_code=code, start_date=start_date, end_date=end_date, adj='qfq', 
                                   factors=['tor']).set_index('trade_date')['pct_chg']
        return_data[code] = stock_return
    except:
        pass

# 计算市场指数收益率
market_return = ts.pro_bar(ts_code='000001.SH', start_date=start_date, end_date=end_date, 
                           adj='qfq', factors=['tor']).set_index('trade_date')['pct_chg']
market_return.name = 'market_return'

# 将股票收益率和市场指数收益率合并到一个DataFrame中
data = pd.concat([return_data, market_return], axis=1)
data = data.dropna()

# 计算超额收益率
data = data.sub(data['market_return'], axis=0)

# 将市值和账面市值比数据合并到一个DataFrame中
data = pd.concat([data, market_cap, book_to_market], axis=1)
data.columns = stock_list + ['market_return', 'market_cap', 'book_to_market']

# 计算因子收益率
factor_data = pd.DataFrame()
factor_data['market_factor'] = market_return - ts.pro_bar(ts_code='000016.SH', start_date=start_date, 
                                                          end_date=end_date, adj='qfq', 
                                                          factors=['tor']).set_index('trade_date')['pct_chg']
factor_data['size_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['market_cap']))).fit().resid
factor_data['value_factor'] = sm.OLS(np.array(data.mean()), sm.add_constant(np.log(data['book_to_market']))).fit().resid

# 计算因子相关性
corr_matrix = factor_data.corr()

# 绘制热图
sns.heatmap(corr_matrix, annot=True, cmap='RdYlBu')
plt.show()

以上代码中,我们首先计算了每个因子的收益率和超额收益率,然后将这些数据合并到一个DataFrame中。接着,我们使用OLS回归分析计算了每个因子的残差,即每个因子收益率中的alpha值。然后,我们计算了每个因子之间的相关性,并使用热图可视化了结果。

法玛三因子模型的优缺点

法玛三因子模型的优点:

  1. 解释力强:相较于CAPM模型,法玛三因子模型的解释力更强,能够更好地解释股票收益率的变化。

  2. 考虑了多个因素:相较于单因子模型,法玛三因子模型考虑了市场因子、规模因子和价值因子,更全面地考虑了股票收益率的影响因素。

  3. 可解释性强:法玛三因子模型中的三个因子,即市场因子、规模因子和价值因子,都是经济学上有实际意义的因素,因此其结果更容易被解释。

法玛三因子模型的缺点:

  1. 忽略了其他因素:法玛三因子模型只考虑了市场因子、规模因子和价值因子,忽略了其他可能对股票收益率有影响的因素,如流动性、动量等。

  2. 样本限制:法玛三因子模型的样本通常是历史股票数据,而历史表现并不能保证未来表现,因此其预测能力有限。

  3. 可能存在共线性问题:法玛三因子模型中的因子可能存在共线性问题,导致其解释能力下降。

  4. 不适用于所有市场:法玛三因子模型的适用范围有限,可能无法适用于所有市场。例如,一些新兴市场可能存在不同的因子影响股票收益率,无法使用法玛三因子模型来解释其表现。

综上所述,法玛三因子模型虽然具有一定的局限性,但在投资组合管理和股票选择方面仍然具有一定的实用性和可靠性。

如何改进提升

虽然法玛三因子模型具有较好的解释股票收益率的能力,但是其仍然存在一些缺点和局限性。下面是一些改进和提升三因子模型的方法:

1 添加其他因子:法玛三因子模型只考虑了市场因子、规模因子和价值因子,可以添加其他因子,如动量、流动性等,来提升模型的解释能力。可以使用pyfolio库中的get_factor_returns函数获取更多的因子数据,例如动量因子和波动率因子:

import pyfolio as pf

start_date = '2015-01-01'
end_date = '2021-12-31'
tickers = ['AAPL', 'MSFT', 'AMZN', 'GOOG', 'FB']
factor_names = ['market_beta', 'size_factor', 'value_factor', 'momentum_factor', 'volatility_factor']

factor_data = pf.utils.get_factor_returns(factor_names, start_date=start_date, end_date=end_date)

2 考虑时间变化:股票市场中因子的影响可能会随着时间变化而变化,可以建立时间变化的因子模型,或者采用滚动回归来考虑时间变化对因子的影响。 可以使用rolling函数进行滚动回归,并将时间窗口设置为1年或更长时间:

import pandas as pd
import statsmodels.api as sm

rolling_window = 252
factor_data_rolling = pd.DataFrame(index=factor_data.index)
for factor_name in factor_names:
    factor_data_rolling[factor_name] = factor_data[factor_name].rolling(window=rolling_window).apply(lambda x: sm.OLS(x, sm.add_constant(factor_data[['market_beta', 'size_factor', 'value_factor']]).loc[x.index]).fit().params)

factor_data_rolling = factor_data_rolling.dropna()

3 考虑非线性关系:股票收益率和因子之间可能存在非线性关系,可以使用非线性回归模型来建立因子模型,或者使用机器学习方法来建立预测模型。 可以使用scikit-learn库中的多项式回归模型来建立非线性关系的因子模型:

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

poly_degree = 2
poly_features = PolynomialFeatures(poly_degree, include_bias=False)
X_poly = poly_features.fit_transform(factor_data[['market_beta', 'size_factor', 'value_factor']])
model = LinearRegression().fit(X_poly, factor_data['returns'])

或者使用scikit-learn库中的机器学习模型来建立因子模型,例如随机森林模型:

from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(n_estimators=100, random_state=0)
model.fit(factor_data[['market_beta', 'size_factor', 'value_factor']], factor_data['returns'])

4 解决共线性问题:法玛三因子模型中的因子可能存在共线性问题,可以使用主成分分析等方法来减少因子之间的共线性,提高模型的解释能力。 可以使用scikit-learn库中的主成分分析模型来减少因子之间的共线性:

from sklearn.decomposition import PCA

n_components = 3
pca = PCA(n_components=n_components)
X_pca = pca.fit_transform(factor_data[['market_beta', 'size_factor', 'value_factor']])

5 使用更多数据:使用更多的数据来建立因子模型,可以提高模型的预测能力和稳健性。 可以使用Quandl等数据源获取更多的历史数据来建立因子模型:

import quandl

quandl.ApiConfig.api_key = 'your_api_key'
data = quandl.get_table('SHARADAR/SF1', ticker=tickers, dimension='MRY', qopts={'columns': ['ticker', 'date', 'marketcap', 'roe', 'pb']})
data = data.pivot(index='date', columns='ticker')
data.columns = [f"{col[0]}_{col[1]}" for col in data.columns]
data = data.dropna()

6 考虑国别和行业因素:股票收益率受到不同国别和行业因素的影响,可以建立考虑国别和行业因素的多因子模型,来提高模型的解释能力。 可以使用pyfolio库中的get_industry_returns函数获取行业因子数据,并使用alpha_vantage等数据源获取国别因子数据:

import alpha_vantage
from alpha_vantage.timeseries import TimeSeries
import pyfolio as pf

# 使用alpha_vantage获取国别因子数据
ts = TimeSeries(key='YOUR_API_KEY', output_format='pandas')
data, meta_data = ts.get_daily(symbol='SPY', outputsize='full')
data.columns = ['open', 'high', 'low', 'close', 'volume']
data = data[['close']]
data = data.pct_change().dropna()
data.columns = ['market_factor']

# 使用pyfolio获取行业因子数据
industry_data = pf.utils.get_industry_returns('morningstar', 'usa')
industry_data.columns = ['industry_factor']

# 合并国别和行业因子数据
factor_data = pd.concat([data, industry_data], axis=1).dropna()
factor_data = factor_data.resample('M').last()

# 运用法玛三因子模型进行分析
...

7 考虑投资组合构建方法:可以使用优化模型来构建投资组合,例如使用CVXPY库中的优化模型:

pythonCopy codeimport cvxpy as cp

weights = cp.Variable(3)
constraints = [cp.sum(weights) == 1, weights >= 0]
expected_return = factor_data_rolling['returns'].mean()
cov_matrix = factor_data_rolling[['market_beta', 'size_factor', 'value_factor']].cov()
risk = cp.quad_form(weights, cov_matrix)
objective = cp.Minimize(risk - 0.5 * gamma * expected_return * cp.quad_form(weights, cov_matrix))
problem = cp.Problem(objective, constraints)
problem.solve()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xxl-job 执行器注册成功,但是xxl-admin 不显示

问题:项目启动成功后,日志显示执行器注册成功,但是xxl-job-admin 管理页面后台确无法查看到执行器信息。 经过百度后并结合官方文档说明,执行器客户端启动完成后,数据只会放在注册表xxl_job_registry 中。 而执行器管…

隐语 Meetup 北京站|精彩时刻大盘点!新品发布、行业案例、专家解读......欢迎围观

“隐语”是开源的可信隐私计算框架,内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择,提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 9月23日,隐语开源社区 Meetup 北京专场顺利举行&am…

sox音频处理和ffmpeg评测

ffmpeg音频处理不如sox,ffmpeg切分,最低切分是0.1秒,而sox可以切分更小单位0.001这种 ffmpeg处理视频等功能更全。 命令 ffmpeg -i 2.wav -y -ss 0.01 -acodec copy test.wav sox 2.wav output2.wav trim 0.01

redis部署与管理

目录 一、关系数据库与非关系型数据库: 1. 关系型数据库: 2.非关系型数据库: 二、关系型数据库和非关系型数据库区别: (1)数据存储方式不同: (2)扩展方式不同&#xf…

【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码

1 绘制2D动画(animation) Matplotlib是一个Python绘图库,它提供了丰富的绘图功能,包括绘制动画。要绘制动画,Matplotlib提供了FuncAnimation类,允许您创建基于函数的动画。下面是一个详细的Matplotlib动画示…

Django — 类视图和中间件

目录 一、类视图1、基于类的结构2、常见的类视图基类3、类视图的优点4、代码案例 二、中间件1、定义2、工作原理3、自带中间件4、中间件开发流程5、自定义中间件6、案例 一、类视图 类视图(Class-Based Views)是 Django 中用于处理 HTTP 请求和生成 HTT…

24届近3年河海大学自动化考研院校

⚜️所谓又专又精,专是指我们售后群团队上百人都是自动化研究生,精是指我们只做自动化这一门专业学科7年了,研究到极致! 🔉今天学长给大家带来的是河海大学控制考研分析 满满干货~还不快快点赞收藏 目录…

XC9700 单通道限流电流负载开关 低内阻负载开关

XC9700是一种低成本、低电压、单P-MOSFET负载开关,为自供电和总线供电的通用串行总线(USB)应用进行了优化。该开关的输入范围从2.4V到5.5V,使它非常适合3V和5V系统。该开关的低RDS(ON),80mΩ&am…

怒刷LeetCode的第16天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:迭代 方法二:模拟 方法三:循环模拟 方法四:传递 第二题 题目来源 题目内容 解决方法 方法一:回溯 方法二:枚举优化 第三题 题目来源 题目…

Unity之NetCode多人网络游戏联机对战教程(3)--NetworkObject组件讲解

文章目录 NetworkObjectAlways Replicate As RootSynchronization TransformActive Scene SynchronizationScene Migration SynchronizationSpawn With ObserversDont Destroy With OwnerAuto Object Parent Sync 后话 NetworkObject 为了复制任何Netcode感知属性或发送/接收R…

Linux生产者和消费者模型 条件变量 信号量

/*条件变量类型 pthread_cond_tint pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);int pthread_cond_destory(pthread_cond_t * cond);int pthread_cond_wait(pthread_cond_t *restrict cond, const pthread_mutex_t *restrict …

人生第一个java项目 学生管理系统

开始编程 建类 开始主要部分 main()部分 方法部分

Nodejs+vue高校机房设备管理系统jt07u

开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 集成IDE对高校机房设备管理系统统进行开发,整合系统的各个模块。 拟开发的高校机房设备管理系统通过测试,确保在最大负载的情况下…

新型crypt勒索病毒,都有哪些特征?勒索病毒解密,数据恢复

近日,云天数据恢复中心在接受用户咨询的过程中发现,市场上悄然出现了一种新型的勒索病毒——crypt勒索病毒,接下来我们将这种类型的勒索病毒做一个全面的分析。 一,中了crypt勒索病毒的特征 在桌面以及多个文件夹中都有一个名称为…

matlab产生指定功率的噪声信号、固定SNR的信号

randn函数产生噪声信号 首先要理解信号的幅度和功率,例如信号的幅度为 U U U,那么信号的功率就是 U 2 U^2 U2,他们之间是平方的关系。 matlab中randn函数用法,产生正态分布的随机数或矩阵的函数。 randn:产生均值为0…

基于Java+vue开发的企事业移动培训考试平台

随着移动互联网的快速发展,越来越多的企业开始关注移动培训和考试平台的开发。为了满足这一需求,我们可以使用Java和Vue来开发一个基于移动端的企事业培训考试平台。 一、背景和需求 企事业移动培训考试平台是一个基于Web的应用程序,旨在提…

el-upload上传文件(vue2,Element中的 el-upload文件上传)

简介:el-upload是一个基于Element UI的上传组件,大家应该都知道,它可以方便地实现文件上传功能,今天来记录下如何(在vue2中)使用el-upload上传文件。 1、首先,我们想要使用el-upload&#xff0c…

Redux Toolkit中action派发但state值不更新的原因

最近一个react项目使用了Redux Toolkit,但是遇到了一个问题:数组始终返回为null,读取不到length. 这个只是问题的表象,真正的原因是productList数据没能从redux中结构出来 但是postman请求是由数据返回的: 推断&#x…

openMVS编译

参考官方文档:https://github.com/cdcseacave/openMVS/wiki/Building vcglib的安装 cd /home/juling/lib git clone -b v1.0.1 https://github.com/cdcseacave/VCG.git vcglibgit clone --recurse-submodules https://github.com/cdcseacave/openMVS.git cd openMV…

git代码管理(一)

目录 介绍暂存区安装创建仓库提交文件查看当前是否还有文件未提交查看提交历史版本回退恢复版本回退 介绍 git是一个分布式的代码版本管理工具(区别于集中式管理的svn),分布式的意思是对于同一个项目可以有多个仓库存储,分布在不…