Matlab 如何将其完全矢量化?
我写了这段代码来同步两个金融时间序列。我下载了一些外汇数据,有一些交易缺失。这里的想法是得到最大的一组,并将其他的与这个同步 例如,我有一套像这样的Matlab 如何将其完全矢量化?,matlab,merge,time-series,vectorization,Matlab,Merge,Time Series,Vectorization,我写了这段代码来同步两个金融时间序列。我下载了一些外汇数据,有一些交易缺失。这里的想法是得到最大的一组,并将其他的与这个同步 例如,我有一套像这样的 a= [20010110 2310 10; 20010110 2311 20; 20010110 2313 30] b= [20010110 2309 50; 20010110 2312 52] 我想要然后我得到这个 c =[20010110 2310 50;; 20010
a= [20010110 2310 10;
20010110 2311 20;
20010110 2313 30]
b= [20010110 2309 50;
20010110 2312 52]
我想要然后我得到这个
c =[20010110 2310 50;;
20010110 2311 50
20010110 2313 52]
c和a差不多,但这只是一个索引
所以我写了这个
function [setAjustado] = ajustar(SetCorreto,SetParaAjustar)
dataCorreto = SetCorreto(:,1); % get the date from the correct set
dataAjustar = SetParaAjustar(:,1); % get the date from the set to be corrected
minCorreto = SetCorreto(:,2); % get the timeframe from the correct set
minAjustar = SetParaAjustar(:,2);get the timeframe from the set to be corrected
setAjustado = zeros(size(SetCorreto)); %corrected set
idxI = dataAjustar == dataCorreto(1); %generating the first range to search
for i=2:size(SetCorreto,1)
try
if (i >1 && dataCorreto(i) ~= dataCorreto(i-1)) % if the dates are the same, i dont need to look for the range again
idxI = dataAjustar == dataCorreto(i); % generate the range to search
idxIa = find(idxI==1,1); % find the first index
end
idx = find(minAjustar(idxI)>=minCorreto(i),1) +idxIa; % find the nearest occurency in the set to be corrected to match the correct set
setAjustado(i,:) = SetParaAjustar(idx,:); %replace all the line. This line have prices close, max, low and open.
setAjustado(i,2) = minCorreto(i); %adjust the timeframe to match the correct set
catch
if i==1 % in case of i to be greater then the size of set to be corrected
a=i;
else
a= i-1;
end
setAjustado(i,:) = setAjustado(a,:); % will copy the last line created in corrected set
end
end
但是我觉得这件事很慢。。。有人能帮我加快速度吗
Tks提前 根据您发布的数据和您的评论,我尝试了以下几点:
% first two columns are considered "keys", last one contains the values
a = [20010110 2310 10;
20010110 2311 20;
20010110 2313 30];
b = [20010110 2309 50;
20010110 2312 52];
% get a row identifier for each instance
[~,~,ind] = unique([a(:,1:2);b(:,1:2)], 'rows');
ind_a = ind(1:size(a,1));
ind_b = ind(size(a,1)+1:end);
% merge the data
c = nan(max(ind),size(a,2));
c(ind_a,1:end-1) = a(:,1:end-1);
c(ind_b,:) = b;
% fill-in missing values from last know values
for i=2:size(c,1)
if isnan(c(i,end))
c(i,end) = c(i-1,end);
end
end
% only keep instances matching A's rows
c = c(ind_a,:);
结果是:
>> c
c =
20010110 2310 50
20010110 2311 50
20010110 2313 52
如果实际数据包含更多列,则需要相应地调整代码。我不明白“syncrhonise”是什么意思。你到底想做什么计算?阿姆罗,我做了一点修改,一切都很顺利,非常感谢!%合并数据c=nan(最大值(ind),大小(a,2));c(ind_a,1:2)=a(:,1:2);c(ind_b,:)=b;%如果isnan(c(i,end))c(i,3:end)=c(i-1,3:end),则填写i=2:size(c,1)的最后已知值中缺少的值;结束