How to create a matrix with 1 on ij-th position and zeros elsewhere from a lower triangular matrix?

3 Ansichten (letzte 30 Tage)
It may be a very simple question For a symmetric matrix A (3x3), say A=[2 4 6;4 8 11;6 11 20], the way to extract its unique elements (on and lower the diagonal) in an output vector B is:
B=(A(tril(A)~=0))
B = 2
4
6
8
11
20
How can I create matrices C1,C2,C3,...,C6, such that
B(1)=A.*C1, B(2)=A.*C2, ..., B(6)=A.*C6
C1=[1 0 0;0 0 0;0 0 0];
C2=[0 0 0;1 0 0;0 0 0];
C3=[0 0 0;0 0 0;1 0 0];
C4=[0 0 0;0 1 0;0 0 0];
C5=[0 0 0;0 0 0;0 1 0];
C6=[0 0 0;0 0 0;0 0 1];
  4 Kommentare
Stephen23
Stephen23 am 31 Mai 2018
Bearbeitet: Stephen23 am 31 Mai 2018
Try this:
[I,J] = find(tril(A)~=0)
Note that you can already find this in my answer, on this line:
[R,C] = find(T);
Niveen El Zayat
Niveen El Zayat am 31 Mai 2018
Stephen, my last comment answer my last question I add, the relation compute the index (i,j) corresponds to f. which as you comment it coincide with a part of you answer as well.
Thanks a lot for your prompt reply
Best regards

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 31 Mai 2018
Bearbeitet: Stephen23 am 31 Mai 2018
A = [2,4,6;4,8,11;6,11,20]
S = size(A);
T = tril(true(S));
[R,C] = find(T);
N = nnz(T);
Z = zeros([S,N]);
V = 1:N;
Z(sub2ind([S,N],R,C,V(:))) = 1
Each page of Z (i.e. the third dimension) is one of the requested matrices, which you can access easily using indexing:
>> Z(:,:,1)
ans =
1 0 0
0 0 0
0 0 0
>> Z(:,:,2)
ans =
0 0 0
1 0 0
0 0 0
...
>> Z(:,:,6)
ans =
0 0 0
0 0 0
0 0 1

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by