how to velocize execution code
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Luca Re
am 30 Aug. 2024
Bearbeitet: Luca Re
am 21 Okt. 2024
load('matlab_v1.mat')
load('matlab_v2.mat')
[r,c]=size(v1);
res=zeros(size(v1));
t=0;
for i=1:c
for ii=1:r
a=v1(ii,i);
b=v2(ii,i);
if a
t=0;
end
if b
t=1;
end
Res(ii,i)=t;
end
end
%explanation:
%When v1=1 then i set=0 Res until the end
%When v2=1 then i set=1 Res until the end
it's possibile to velocize it avoid loop (using vectorizing or other)
2 Kommentare
Walter Roberson
am 30 Aug. 2024
if a
t=0;
end
if b
t=1;
end
It is possible that a is 0 and b is also 0. In that case, t will remain unchanged. That makes it more difficult to vectorize, since you have to copy the previous t .
Akzeptierte Antwort
Walter Roberson
am 30 Aug. 2024
load('matlab_v1.mat')
load('matlab_v2.mat')
res = nan(size(v1));
res(v1 ~= 0) = 0;
res(v2 ~= 0) = 1;
res = reshape(fillmissing( res(:), 'previous', 'EndValues', 0), size(res));
2 Kommentare
Weitere Antworten (1)
Jatin
am 30 Aug. 2024
Hi Luca,
As per my understanding, you are trying to fill a new logical array “res” which is assigned a value of 0 if the logical array “v1” has a value 1 and assigned a value 1 if the logical array “v2” has a value 1.
The above requirement can be easily vectorized in MATLAB using logical indexing of arrays. Refer the script below:
res = zeros(size(v1));
% Logical indexing to set values based on conditions
res(v2) = 1; % Set to 1 where v2 is true
The assignment of “res” using “v1” is not necessary because “res” is already initialized to all zero so assignment of “0” is redundant here.
Note: If you are trying to assign the values of res as a switch where you keep on assigning a value 1 until you encounter “v1 = 1” and assign value 0 until you encounter “v2 = 1”. In this case the current assignment results depend on the previous state and hence vectorized assignment cannot be done.
You can refer the documentation below for information on “Array Indexing on logical values”:
9 Kommentare
Jatin
am 30 Aug. 2024
"why uppercase is more slow of lowercase?"
Stephen23 pointed out that using "res" instead of "Res" can enhance speed because "res" is already pre-initialized in your code. Since "Res" was not pre-initialized, every time you assign values to it, memory has to be dynamically allocated, which adds overhead. By pre-initializing "res," you avoid this overhead, saving time in your operations.
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!