Matrix Calculation Code help

1 view (last 30 days)
Fayyaz
Fayyaz on 23 Mar 2015
Edited: John D'Errico on 23 Mar 2015
Hi.
I have two matrices, both have order 81*2. The first matrix includes columns 1)zone no. (from 1 to 81, i.e "i") and 2) P values for these 81 zones. Similarly, the second matrix includes columns 1) zone no.(from 1 to 81, i.e "j") and 2) A values for these 81 zones.
I need to calculate a 81*81 matrix, which values should be according to the formula; Tij= Pi*Aj/ Sum(A). (i.e sum of A 2nd column as a one value).
Also the values for the T11=T22=.......=T81,81 should be equal to ZERO. (I need values only when i is Not equal to j)
I have also uploaded the files. Any help in this regard would be greatly appreciated. Thanks in advance.

Accepted Answer

John D'Errico
John D'Errico on 23 Mar 2015
Edited: John D'Errico on 23 Mar 2015
Easy, peasy. No need even for bsxfun.
Just use an outer product to form P(i)*A(j) as an 81x81 matrix. Then, since the sum of A is a scalar, divide by that sum.
P(:,2)*A(:,2).'/sum(A(:,2))

More Answers (1)

Guillaume
Guillaume on 23 Mar 2015
If I understood correctly, this is one way to do what you want:
bsxfun(@times, P(:, 2), A(:, 2).') / sum(A(:, 2)) .* ~eye(size(P, 1), size(A, 2))

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!