我遇到了一个MATLAB编码问题,需要从一个包含多天和投资组合的大型数据文件中为许多股票创建市场权重。
前几天,我收到了一位专家的帮助,他使用了"嵌套循环",效果很好,但我不明白他在最后一行做了什么。我想知道是否有人能解释一下最后一行代码。xp=x(其中x=市场价值)
dates=unique(x(:,1)); (finds the unique dates in the data set Dates are column 1)
for i=1:size(dates,1) (creates an empty matrix to fill the data in)
for j=5:size(xp,2)
xp(xp(:,1)==dates(i),j)=xp(xp(:,1)==dates(i),j)./sum(xp(xp(:,1)==dates(i),j)); (help???)
end
end
非常感谢您的任何评论!
要理解代码,必须了解冒号运算符、逻辑索引以及/
和./
之间的区别。如果其中任何一个不清楚,请在文档中查找。
下面的代码做了同样的事情,但更容易阅读,因为我把每一步都分成了一行:
dates=unique(x(:,1));
%iterates over all dates. size(dates,1) returns the number of dates
for i=1:size(dates,1)
%iterates over the fifth to last column, which contains the data that will be normalised.
for j=5:size(xp,2)
%mdate is a logical vector, which is used to select the rows with the currently processed date.
mdate=(xp(:,1)==dates(i))
%s is the sums up all values in column j same date
s=sum(xp(mdate,j))
%divide all values in column j with the same date by s, which normalises to 1
xp(mdate,j)=xp(mdate,j)./s;
end
end
对于这段代码,我建议使用调试器并逐步执行代码。