Reshape matrix dimensions to a larger and sparse one

조회 수: 2 (최근 30일)
LH
LH 2023년 8월 7일
댓글: James Tursa 2023년 8월 7일
Hi all,
I have matrix A with dimensions . I have also a sparse matrix B with dimensions with different elements.
I'd like to change the dimesions of A so it matches matrix B with the same sparsity/structure, i.e., the first two row elements in the first column of A to be put in a new column, and then the following two row elements to be put in another column, etc. Here are example matrices for help:
%matrix A with dimensions 10x4
A = [0.8147 0.1576 0.6557 0.7060;
0.9058 0.9706 0.0357 0.0318;
0.1270 0.9572 0.8491 0.2769;
0.9134 0.4854 0.9340 0.0462;
0.6324 0.8003 0.6787 0.0971;
0.0975 0.1419 0.7577 0.8235;
0.2785 0.4218 0.7431 0.6948;
0.5469 0.9157 0.3922 0.3171;
0.9575 0.7922 0.6555 0.9502;
0.9649 0.9595 0.1712 0.0344];
%matrix B with dimensions 40x20
B = [0.4387 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0.3816 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0.7655 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0.7952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0.1869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0.4898 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0.4456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0.6463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0.7094 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0.7547 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0.2760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0.6797 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0.6551 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0.1626 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0.1190 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0.4984 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0.9597 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0.3404 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0.5853 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0.2238 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0.7513 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0.2551 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0.5060 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0.6991 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0.8909 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0.9593 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0.5472 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0.1386 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1493 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2575 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8407 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2543 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8143 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2435 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9293 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3500 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1966 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2511 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6160 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4733 ];
Any help would be appreicted.
  댓글 수: 1
James Tursa
James Tursa 2023년 8월 7일
Is it possible for some of the "sparse pattern" elements in B to be 0? Some algorithms that one might use will break down if this is possible.

댓글을 달려면 로그인하십시오.

채택된 답변

Bruno Luong
Bruno Luong 2023년 8월 7일
A = [0.8147 0.1576 0.6557 0.7060;
0.9058 0.9706 0.0357 0.0318;
0.1270 0.9572 0.8491 0.2769;
0.9134 0.4854 0.9340 0.0462;
0.6324 0.8003 0.6787 0.0971;
0.0975 0.1419 0.7577 0.8235;
0.2785 0.4218 0.7431 0.6948;
0.5469 0.9157 0.3922 0.3171;
0.9575 0.7922 0.6555 0.9502;
0.9649 0.9595 0.1712 0.0344];
%matrix B with dimensions 40x20
B = [0.4387 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0.3816 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0.7655 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0.7952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0.1869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0.4898 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0.4456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0.6463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0.7094 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0.7547 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0.2760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0.6797 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0.6551 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0.1626 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0.1190 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0.4984 0 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0.9597 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0.3404 0 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0.5853 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0.2238 0 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0.7513 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0.2551 0 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0.5060 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0.6991 0 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0.8909 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0.9593 0 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0.5472 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0.1386 0 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1493 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2575 0 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8407 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2543 0 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8143 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2435 0 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9293 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3500 0 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1966 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2511 0 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6160 ;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4733 ];
[i,j,b] = find(B);
AS=sparse(i,j,A(:));
full(AS)
ans = 40×20
0.8147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9058 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9134 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6324 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0975 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2785 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5469 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9649 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by