create a sparse multidimensional matrix
    조회 수: 5 (최근 30일)
  
       이전 댓글 표시
    
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.
댓글 수: 0
답변 (5개)
  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)
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
  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)
댓글 수: 0
  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)
% 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)
% full visualisation
full(SparseMat)
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





