Apply a function to each column of a matrix (vectorization)
What's the fastest way to apply a function to each column of a matrix without scrolling through it?
The function I am using pwelch
, but the concept should be the same for any function. I am currently looping though my matrix is as such.
X = ones(5);
for i = 1:5 % length of the number of columns
result = somefunction(X(:,i))
end
Is there a way to vectorize this code?
source to share
You speak
the concept should be the same for any function
Actually, it is not so. Depending on the function, the code that calls it can be vectorized or not. It depends on how the function is written internally. From the outside of the function, there is nothing you can do to make it vectorized. Vectorization is done inside the function, not outside.
If the function is vectorized, you just call it using the matrix and the function works on every column. For example, what it does sum
.
In case pwelch
you're in luck: according to the documentation (emphasis mine),
Pxx = pwelch(X)
returns the estimated power spectral density (PSD),,Pxx
...When
X
is a matrix, PSD is computed independently for each column and stored in the corresponding columnPxx
.
So pwelch
is a vector function.
source to share