Duplicate Each Element in a Matrix without using Repelem or Repmat

8 ビュー (過去 30 日間)
Benjamin Ong
Benjamin Ong 2019 年 10 月 31 日
コメント済み: Stephen23 2021 年 5 月 4 日
Is there a way I can make each element in a matrix duplicate into a 3 by 3? if
A=[1 0;0 1]
Is there a way i can turn it into
Aew=[1 1 1 0 0 0;1 1 1 0 0 0;1 1 1 0 0 0;0 0 0 1 1 1;0 0 0 1 1 1;0 0 0 1 1 1]
so basically
Anew=repelem(A,3,3)
but without repelem, repmat or any special functions?
Thanks
  1 件のコメント
Adam
Adam 2019 年 10 月 31 日
Yes, but the only reason I can see for wanting to do so is as a homework question. Like most things you can do it with a for loop.

サインインしてコメントする。

採用された回答

Fangjun Jiang
Fangjun Jiang 2019 年 10 月 31 日
編集済み: Fangjun Jiang 2019 年 10 月 31 日
a=eye(2);
k=3;
d=blkdiag(ones(k,1),ones(k,1));
b=d*a*d'
%%Or a more generic case
a=[1 2 3;4 5 6];
k=3;
[m,n]=size(a);
d1=ones(k,1)*ones(1,m);
d1=mat2cell(d1,k,ones(1,m));
d1=blkdiag(d1{:});
d2=ones(n,1)*ones(1,k);
d2=mat2cell(d2,ones(n,1),k);
d2=blkdiag(d2{:});
b=d1*a*d2

その他の回答 (1 件)

Stephen23
Stephen23 2019 年 10 月 31 日
編集済み: Stephen23 2019 年 10 月 31 日
>> A = [1,0;0,1]
A =
1 0
0 1
>> V = ceil((1:6)/3);
>> B = A(V,V)
B =
1 1 1 0 0 0
1 1 1 0 0 0
1 1 1 0 0 0
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
  5 件のコメント
Ayca Yigit
Ayca Yigit 2021 年 5 月 4 日
How does it work?
Stephen23
Stephen23 2021 年 5 月 4 日
@Ayca Yigit: it generates a vector of indices V, where each index repeats k times. Consider what happens when you use those indices to select the elements of A(V,V).

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by