2D Array Manipulation / Script

I am looking to write a simple MATLAB script that will take any 2D array and double its size by duplicating every entry in the horizontal, vertical, and diagonal direction. The catch is I can not use for-loops. I have been thinking about using repmat(), but am unsure how this could translate to my problem.
For example, if I have a matrix A = [1 4 7 ; 8 9 3], then the result should be:
A=[
1 1 4 4 7 7
1 1 4 4 7 7
8 8 9 9 3 3
8 8 9 9 3 3
]
I hope I am articulating my thoughts well. Any help or tips would be greatly appreciated.

 採用された回答

Azzi Abdelmalek
Azzi Abdelmalek 2012 年 9 月 6 日
編集済み: Azzi Abdelmalek 2012 年 9 月 6 日

0 投票

%method1
res=cell2mat(arrayfun(@(x) repmat(x,2,2),A,'uni',false))
%or method 2
[n,m]=size(A)
B=zeros(n,2*m);
B(:,1:2:2*m)=A;B(:,2:2:2*m)=A
C=zeros(2*n,2*m);
C(1:2:2*n,:)=B;C(2:2:2*n,:)=B

2 件のコメント

Jason Kossis
Jason Kossis 2012 年 9 月 6 日
Thanks for the help!
Matt Fig
Matt Fig 2012 年 9 月 6 日
Method 3:
kron(A,ones(2))

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

その他の回答 (1 件)

Matt Fig
Matt Fig 2012 年 9 月 6 日

0 投票

You can also use expand, which is written to be more general and memory efficient.
A = [1 4 7 ; 8 9 3],
expand(A,[2,2])
ans =
1 1 4 4 7 7
1 1 4 4 7 7
8 8 9 9 3 3
8 8 9 9 3 3

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by