how to Expanand any matrix
조회 수: 2 (최근 30일)
이전 댓글 표시
If Have 3x3 Matrix example
a = [-1 2 0;
2 1 -1;
1, 0, 1]
if my expansion factor is 5 i need to make eack element as 5x5 matrix with -1 replaced by all zero matris of 5x5,0 with identitiy matrix and 1 with identity right shift the column by one times and so on.
How can i do this?
댓글 수: 1
Andrei Bobrov
2019년 9월 1일
편집: Andrei Bobrov
2019년 9월 1일
Please show off your expanded matrix in your case for matrix a.
답변 (2개)
the cyclist
2019년 9월 1일
편집: the cyclist
2019년 9월 1일
I am not certain I interpreted your question correctly, especially the "righth shift the column by ones times". But I believe that the algorithm below does what you want, or can be easily changed to do so.
a = [-1 2 0;
2 1 -1;
1, 0, 1];
expandFac = 5;
[m,n] = size(a);
A = zeros(expandFac*m,expandFac*n);
for mi = 1:m
for ni = 1:n
rowZero = expandFac*(mi - 1);
colZero = expandFac*(ni - 1);
switch a(mi,ni)
case -1
insertedMatrix = zeros(expandFac);
otherwise
insertedMatrix = diag(ones(1,expandFac-a(mi,ni)),a(mi,ni));
end
A(rowZero+1:rowZero+expandFac,colZero+1:colZero+expandFac) = insertedMatrix;
end
end
The key conceptual elements of this algorithm are
- Preallocating the 15x15 array
- For each element of a, finding the appropriating location to insert its corresponding 5x5 array. (That's what rowZero and colZero are doing)
- For each element of a, figure what 5x5 to insert. (That's what the switch statement is doing.)
- Use the diag command to create the identity and "shifted identity" arrays.
댓글 수: 0
Andrei Bobrov
2019년 9월 1일
편집: Andrei Bobrov
2019년 9월 1일
out = cell2mat(arrayfun(@(x,y)diag(ones(5-x,1),x)*y ,abs(a),a>=0,'un',0));
or
z = cell(size(a));
k = zeros(5);
for ii = 1:numel(z)
if a(ii) >= 0
z{ii} = diag(ones(5-a(ii),1),a(ii));
else
z{ii} = k;
end
end
out = cell2mat(z);
댓글 수: 1
the cyclist
2019년 9월 1일
I like how you handled the special case of a == -1 in your one-liner. I should have thought of that in my solution.
참고 항목
카테고리
Help Center 및 File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!