How to fast process a calculation within a matrix without using a loop?

I have a huge matrix A, and what i need to do is to go through each of the matrix element and do this below simple calculation:
[m n] = size(A);
for i=1:m
for j=1:n
B(i,j) = 10^-A(i,j);
end
end
The thing is that it is slow. Is there a way I can avoid the loop and make it faster?
Thank you!

4 Kommentare

Pre-allocation!
B = nan(size(A));
Thank you. What does this do?
It is likely my data might contain NaNs.
Rik
Rik am 29 Mär. 2019
Bearbeitet: Rik am 29 Mär. 2019
Whenever the size of an array increases, Matlab has to create a copy in memory. This takes a lot of time if you repeat that very often. Your original code would cause the output to be extended m+n-1 times.
Pre-allocation would solve this issue by creating an array in advance of the correct size. If array processing is not possible, it is generally worth it to pre-allocate the output array.
Got you!
Many thanks!

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Rik
Rik am 29 Mär. 2019
Yes, use the power of array processing in Matlab:
B=10.^-A;

2 Kommentare

Many thanks!
Will that be a problem, if my data also contains NaNs?
It will do the same as your loop for NaN values, so the B matrix will contain NaN everywhere where A has a NaN.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2019a

Tags

Gefragt:

am 29 Mär. 2019

Bearbeitet:

am 29 Mär. 2019

Community Treasure Hunt

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

Start Hunting!

Translated by