create a sparse multidimensional matrix

2 ビュー (過去 30 日間)
Lama Hamadeh
Lama Hamadeh 2022 年 7 月 7 日
編集済み: Jonas 2022 年 7 月 7 日
Hi all,
I am trying to construct a multidimensional sparse matrix that has the following shape:
I have a problem knowing how to jump from column to the next, shift the rows downwards, and assign number 1 to the third element.
Any help would be appreicted.
Thanks.

回答 (5 件)

Jonas
Jonas 2022 年 7 月 7 日
編集済み: Jonas 2022 年 7 月 7 日
you can try this:
myData=[1 2 3 4;
5 6 7 8;
9 10 11 12];
% get sizes
dataChunkLength=size(myData,2);
numOfChunks=size(myData,1);
% preallocate
mat=zeros(dataChunkLength*numOfChunks,numOfChunks);
for colNr=numOfChunks:-1:1
% write
mat(1:dataChunkLength,colNr)=myData(colNr,:);
if colNr>1
% and shift along first dimension
mat=circshift(mat,dataChunkLength,1);
end
end
disp(mat)
1 0 0 2 0 0 3 0 0 4 0 0 0 5 0 0 6 0 0 7 0 0 8 0 0 0 9 0 0 10 0 0 11 0 0 12
or, if you waqnt to write alswys the same data
myData=[0 0 1 0];
% get length
dataChunkLength=numel(myData);
% write to n columns
nTimes=5;
% preallocate
mat=zeros(dataChunkLength*nTimes,nTimes);
for colNr=nTimes:-1:1
% write
mat(1:dataChunkLength,colNr)=myData;
if colNr>1
% and shift along first dimension
mat=circshift(mat,dataChunkLength,1);
end
end
disp(mat)
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

Torsten
Torsten 2022 年 7 月 7 日
i(1) = 3;
j(1) = 1;
v(1) = 1.0;
i(2) = 7;
j(2) = 2;
v(2) = 1.0;
i(3) = 11;
j(3) = 3;
v(3) = 1.0;
m = 12;
n = 3;
A = sparse(i,j,v,m,n)
A =
(3,1) 1 (7,2) 1 (11,3) 1

Karim
Karim 2022 年 7 月 7 日
you can either fill it in directly or use blkdiag to create this shape:
% direct method
% on row 3 7 and 11, column 1 2 3 respectivly, fill in 1, with 12 rows and 3 columns
SparseDirect = sparse([3 7 11],[1 2 3],1,12,3)
SparseDirect =
(3,1) 1 (7,2) 1 (11,3) 1
% alternative using blkdiag
A = sparse( [0;0;1;0] );
B = sparse( [0;0;1;0] );
C = sparse( [0;0;1;0] );
SparseMat = blkdiag(A,B,C)
SparseMat =
(3,1) 1 (7,2) 1 (11,3) 1
% full visualisation
full(SparseMat)
ans = 12×3
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0

Matt J
Matt J 2022 年 7 月 7 日
n=3;
A=kron(speye(n),[0;0;1;0])
A =
(3,1) 1 (7,2) 1 (11,3) 1
full(A)
ans = 12×3
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0

KSSV
KSSV 2022 年 7 月 7 日
A = sparse(12,3) ;
A(3,1) = 1 ;
A(7,2) = 1 ;
A(11,3) = 1 ;
A
A =
(3,1) 1 (7,2) 1 (11,3) 1
full(A)
ans = 12×3
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0

カテゴリ

Find more on Operating on Diagonal 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!

Translated by