Multiply matrices of different sizes
조회 수: 5 (최근 30일)
이전 댓글 표시
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.
댓글 수: 2
Jan
2018년 3월 16일
"Didn't work" is a weak explanation. Better post your code and the complete error message. Not that bsxfun will be the solution, so letting us guess, what fails in your case, is not useful.
채택된 답변
Jan
2018년 3월 19일
편집: Jan
2018년 3월 19일
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
Jan
2018년 3월 19일
@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.
추가 답변 (1개)
Geoff Hayes
2018년 3월 14일
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?
댓글 수: 3
Geoff Hayes
2018년 3월 16일
NMans - when I run the code that I posted in my answer, Z is a 100x7 matrix. Are you sure that your answer is 100x100?
참고 항목
카테고리
Help Center 및 File Exchange에서 Approximate Functions with Lookup Tables에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!