Generate array of sequence pairs without iteration

1 次查看(过去 30 天)
If I have M = 13; N = 8; and I need following result
[1 1; 1 2; 1 3; 1 4; 1 5; 1 6; 1 7; 1 8;...
2 1; 2 2; 2 3; 2 4; 2 5; 2 6; 2 7; 2 8; 3 1; ... 13 7; 13 8]
is there any built-in MATLAB functions to achieve this without iteration? I've tried repmat but couldn't figure out how to get the exact result.
Working solution is:
a = [];
for m = 1:13
for n = 1:8
a = [a [m n]];
end
end
Thanks
  1 个评论
Stephen23
Stephen23 2023-1-29
The standard MATLAB approach is to use NDGRID or MESHGRID:
M = 13;
N = 8;
[x,y] = meshgrid(1:M,1:N);
a = [x(:),y(:)]
a = 104×2
1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 2 1 2 2

请先登录,再进行评论。

采纳的回答

Dyuman Joshi
Dyuman Joshi 2023-1-29
编辑:Dyuman Joshi 2023-1-29
A combination of repelem and repmat -
M=13;N=8;
%corresponding arrays
m=1:M;n=1:N;
out1=[repelem(m',N,1) repmat(n',M,1)]
out1 = 104×2
1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 2 1 2 2
out1(end,:)
ans = 1×2
13 8
There is a function - combvec, however, it is a part of a toolbox -
out2=rot90(combvec(n,m),-1)
out2 = 104×2
1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 2 1 2 2
out2(end,:)
ans = 1×2
13 8
  2 个评论
Sabyrzhan Tasbolatov
Thanks, first out1 works for me, though it needed to be in 1D with 2D elements [1 1; 1 2; 1 3; ...]
Dyuman Joshi
Dyuman Joshi 2023-1-29
"in 1D with 2D elements [1 1; 1 2; 1 3; ...]"
Do you mean like this?
[1 1 1 2 1 3 .. 13 8]
If yes, then you have inserted the semi-colon incorrectly in both your statements, it should be a regular comma. The way to achieve that would be -
M=13;N=8;
out=reshape([repelem(1:M,1,N);repmat(1:N,1,M)],1,[])
out = 1×208
1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 2 1 2 2 2 3 2 4 2 5 2 6 2 7

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by