# it's possible to velocize this loop?

1 vue (au cours des 30 derniers jours)
piero le 18 Août 2023
Modifié(e) : Bruno Luong le 18 Août 2023
orig=Sis(i).dailyprof;
xx=orig;
x1=find(xx);
last=-1;
for i=numel(x1):-1:1
if yy(x1(i))~=last
last=yy(x1(i));
xx(x1(i))
xx(x1(i))=xx(x1(i))-k;
xx(x1(i))
end
end
class(xx) double
class(YY) double
%%CHECK!
%k=[orig xx yy];
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
ProblemSolver le 18 Août 2023
Modifié(e) : Walter Roberson le 18 Août 2023

Connectez-vous pour commenter.

### Réponse acceptée

Bruno Luong le 18 Août 2023
Modifié(e) : Bruno Luong le 18 Août 2023
@piero Your question/code is awfully asked: no comment, no description, cannot run as it is, debug code left over, etc....
xx = orig;
k = 100;
x1 = find(xx);
last=-1;
for i=numel(x1):-1:1
if yy(x1(i))~=last
last=yy(x1(i));
xx(x1(i))=xx(x1(i))-k;
end
end
xx2 = orig;
x1 = find(xx2);
yyx1 = yy(x1);
last = x1([diff(yyx1(:))~=0; true]);
xx2(last) = xx2(last) - k;
isequal(xx, xx2)
ans = logical
1
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
piero le 18 Août 2023
always top! Thank you

Connectez-vous pour commenter.

### Plus de réponses (1)

ProblemSolver le 18 Août 2023
However, to the understanding what you are looking for is VECTORIZING the loop:
First, you should change 'find to logical indexing:
x1 = logical(orig);
Then, pre-allocate xx and yy to avoid repeated memory allocations:
xx = zeros(size(orig));
yy = zeros(size(orig));
The MAIN part I guess what you are looking for:
last = [0; yy(x1(1:end-1))];
xx(x1) = orig(x1) - k;
Now you can use bsxfun to vectorize the difference operation:
xx(x1) = orig(x1) - k*double(bsxfun(@times, mask, ones(sum(x1),1)));
For optimization, the class checks should be avoided and just use 'double'
xx = double(zeros(size(orig)));
yy = double(zeros(size(orig)));
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
piero le 18 Août 2023
thanks but it give me an error..
Arrays have incompatible sizes for this operation.
Error in untitled12 (line 30)
i attachment file

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Logical dans Help Center et File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by