convert vector to matrix
1 view (last 30 days)
Show older comments
i have a vector
a=[1,2,3,4,5,6];
i want to convert it to matrix such that the diagonals are all 0 and the rest of the elements are:
M=[0 1 2 3;1 0 4 5;2 4 0 6;3 5 6 0];
0 1 2 3
1 0 4 5
2 4 0 6
3 5 6 0
0 Comments
Accepted Answer
Stephen23
on 3 Jul 2018
Edited: Stephen23
on 3 Jul 2018
>> a = [1,2,3,4,5,6];
>> M = tril(ones(4),-1);
>> M(M>0) = a;
>> M = M+M.'
M =
0 1 2 3
1 0 4 5
2 4 0 6
3 5 6 0
And if you want to automatically adjust the size you can basically invert the binomial coefficient:
>> N = (sqrt(1+numel(a)*8)-1)/2;
>> M = tril(ones(N+1),-1);
1 Comment
Rik
on 3 Jul 2018
If you need to automatically find the correct size:
a = [1,2,3,4,5,6];
M = tril(ones(.5+0.5*sqrt(8*numel(a)+1)),-1);
M(M>0) = a;
M = M+M.';
>> a = 1:3;
>> M = tril(ones(.5+0.5*sqrt(8*numel(a)+1)),-1);
>> M(M>0) = a;
>> M = M+M.'
M =
0 1 2
1 0 3
2 3 0
More Answers (0)
See Also
Categories
Find more on Electrical Block Libraries 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!