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!