perform matrix operation without for loop
이전 댓글 표시
I have a matrix (exp_data) of size 25000*45000. I need to perform the following operations as in the code, however with the for loop it takes ~4 hours to operate,
beta is a set of 3 values, for which I need to perform the operations. beta=[0.1, 0.04, 0.6]
any help is much appreciated
for m=1:3
for i=1:25000
for j=1:45000
if exp_data(i,j)>1.5;
xes(i,j)=exp(beta(m).*(exp_data(i,j)));
else xes(i,j)=1;
end;
end
end;
xe(:,:,m)=xes;
end;
채택된 답변
추가 답변 (1개)
Ameer Hamza
2020년 9월 25일
편집: Ameer Hamza
2020년 9월 25일
Following code is equivalent
xe = zeros([size(exp_data) numel(beta)]);
mask = exp_data > 1.5;
for m = 1:numel(beta)
xes = ones(size(exp_data));
xes(mask) = exp(beta(m).*(exp_data(mask)));
xe(:,:,m) = xes;
end
Not sure if there are any speed improvements since JIT compiler is already claimed to be working very well.
댓글 수: 2
madhan ravi
2020년 9월 25일
I belive your last line should be:
xe(:,:,m) = xes;
Ameer Hamza
2020년 9월 25일
Yes!! Thanks for correction.
카테고리
도움말 센터 및 File Exchange에서 Interpolation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!