Multiply matrices of different sizes
28 views (last 30 days)
Show older comments
Background: I've got 7 years worth of Power data for a wind farm binned into 100 bins of wind speed i.e. 100 x 7 matrix. I've got probability of each of that bin happening i.e. 100 x 1 matrix. I would like to multiply the elements of 100x7 matrix by elements in a 100x1 matrix to get cumulative probability of power output.
In simple term: how do I multiply 100x7 matrix by 100x 1 matrix? Tried bsxfun but didn't work.
Accepted Answer
Jan
on 19 Mar 2018
Edited: Jan
on 19 Mar 2018
Your code:
for yrs = 1:length(years)
[N,edges,bin] = histcounts(SPEED(:,yrs),100);
COUNT = N.'; % Here [] is a waste of time
nelements = sum(COUNT);
prob_bins = COUNT ./ nelements;
Area = bsxfun(@times, Pow_ave(:,yrs), prob_bins);
end
Area is overwritten in each iteratotion. Maybe you want:
Area(:, yrs) = Pow_ave(:,yrs) .* prob_bins;
As far as I can see, Pow_ave(:, yrs) and prob_bins are both 100x1 vectors, so there is no need for bsxfun.
2 Comments
Jan
on 19 Mar 2018
@NMans: Pre-allocate theoutput before the loop:
Area = zeros(100, 7);
This avoids the iterative growing of the array, which is expensive in general - although the runtime will not matter much in this case.
More Answers (1)
Geoff Hayes
on 14 Mar 2018
NMans - if you want to multiply each column of the 100x7 matrix by the 100x1 matrix, then you could use bsxfun as
X = randi(255,100,7); % generate some dummy data
Y = rand(100,1);
Z = bsxfun(@times,X,Y);
Or are you trying to do something else?
See Also
Categories
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!