can i velocize it? (if possible to vectorize)
1 次查看(过去 30 天)
显示 更早的评论
[r,c]=size(DD);
z=find(RP_bin);
filtro=zeros(numel(z),c);
period=3; %value=from 1 to numel(z)
tic
for i=1:c
for ii=period+1:numel(z)
idx=z(ii);
idx2=max(1,MinTrade_Tab(ii,i));
s=DD(idx2:idx,i);
n=any(ismember(s,0));
filtro(ii,i)=n;
end
end
toc
2 个评论
dpb
2023-10-1
You would stand a far better chance if you explained the objective here and what the input data are instead of expecting folks to ferret it out on their own...
采纳的回答
Bruno Luong
2023-10-1
On my computer the acceleratoion of Method V2 is more impressive
load('matlab_DD.mat')
load('matlab_minTrades.mat')
load('matlab_RpBin.mat')
[r,c]=size(DD);
z=find(RP_bin);
period = 0 % not provided by OP
tic
filtro=zeros(numel(z),c);
for i=1:c
for ii=period+1:numel(z)
idx=z(ii);
idx2=max(1,MinTrade_Tab(ii,i));
s=DD(idx2:idx,i);
n=any(ismember(s,0));
filtro(ii,i)=n;
end
end
toc
% Method V2
tic
[m,n] = size(DD);
k = [-Inf; find(DD==0); Inf];
start = MinTrade_Tab(period+1:numel(z),:);
start = max(start,1);
stop = z(period+1:end);
kstop = stop + m * (0:n-1);
kstart = start + m * (0:n-1);
l1 = discretize(kstart,k,'IncludedEdge','right');
l2 = discretize(kstop,k,'IncludedEdge','left');
filtro2 = l1+1<=l2;
filtro2 = [zeros(period,c); filtro2];
toc
close all
ax1=subplot(1,2,1);
imagesc(filtro)
ax2=subplot(1,2,2);
imagesc(filtro2)
linkaxes([ax1 ax2])
% Check
isequal(filtro, filtro2)
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Visualization and Data Export 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!