Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在两组条件下简化循环_Matlab_Loops_Controls_Indices - Fatal编程技术网

Matlab 在两组条件下简化循环

Matlab 在两组条件下简化循环,matlab,loops,controls,indices,Matlab,Loops,Controls,Indices,我想建立一对索引=[row col]其中 row=4*(n-1)+i和col=4*(m-1)+i 对i、m和n的解释: 对于n=1和m=2,3,4,循环i=1:4 对于n=2和m=1,循环i=1:4 对于n=3和m=5,循环i=1:4 结果应该是: row=[1 1 2 2 3 3 4 4 5 6 7 8 9 10 11 12] col=[5911361010414711581616123143417181920] 也就是说,我想在不同的n-m条件下建立成对的索引 我的审判: row = []

我想建立一对索引=
[row col]
其中

row=4*(n-1)+i
col=4*(m-1)+i

i
m
n
的解释:

对于
n=1
m=2,3,4
,循环
i=1:4

对于
n=2
m=1
,循环
i=1:4

对于
n=3
m=5
,循环
i=1:4

结果应该是:

row=[1 1 2 2 3 3 4 4 5 6 7 8 9 10 11 12]

col=[5911361010414711581616123143417181920]

也就是说,我想在不同的
n-m
条件下建立成对的索引


我的审判:

row = []; col = [];
n = 1;
for i = 1 : 4
   for m = [2 3 4]
      row = [row 4 * (n - 1) + i];
      col = [col 4 * (m - 1) + i];
   end
end

n = 2; m = 1;
for i = 1 : 4
   row = [row 4 * (n - 1) + i];
   col = [col 4 * (m - 1) + i];
end

n= 3; m = 5;
for i = 1 : 4
   row = [row 4 * (n - 1) + i];
   col = [col 4 * (m - 1) + i];
end
这是可行的,但实际上我有许多
n-m
条件,并且
I=1:4
的循环重复出现,这似乎可以简化

我可以知道有没有什么优雅的解决方案来完成我的目标吗


感谢您的帮助。

我将创建一个包含所有参数的矩阵,然后应用一次数学:

M=[...n           m           i
      ones(3,1)   (2:4).'     (1:3).';...
      2*ones(4,1) ones(4,1)   (1:4).';...
      3*ones(4,1) 5*ones(4,1) (1:4).';...
];

row = (4 * (M(:,1) - 1) + M(:,3)).';
col = (4 * (M(:,2) - 1) + M(:,3)).';
%alternative:
%index=(4 * (M(:,[1:2]) - 1) + M(:,[3,3])).'

我将创建一个包含所有参数的矩阵,然后应用一次数学:

M=[...n           m           i
      ones(3,1)   (2:4).'     (1:3).';...
      2*ones(4,1) ones(4,1)   (1:4).';...
      3*ones(4,1) 5*ones(4,1) (1:4).';...
];

row = (4 * (M(:,1) - 1) + M(:,3)).';
col = (4 * (M(:,2) - 1) + M(:,3)).';
%alternative:
%index=(4 * (M(:,[1:2]) - 1) + M(:,[3,3])).'

我将创建一个包含所有参数的矩阵,然后应用一次数学:

M=[...n           m           i
      ones(3,1)   (2:4).'     (1:3).';...
      2*ones(4,1) ones(4,1)   (1:4).';...
      3*ones(4,1) 5*ones(4,1) (1:4).';...
];

row = (4 * (M(:,1) - 1) + M(:,3)).';
col = (4 * (M(:,2) - 1) + M(:,3)).';
%alternative:
%index=(4 * (M(:,[1:2]) - 1) + M(:,[3,3])).'

我将创建一个包含所有参数的矩阵,然后应用一次数学:

M=[...n           m           i
      ones(3,1)   (2:4).'     (1:3).';...
      2*ones(4,1) ones(4,1)   (1:4).';...
      3*ones(4,1) 5*ones(4,1) (1:4).';...
];

row = (4 * (M(:,1) - 1) + M(:,3)).';
col = (4 * (M(:,2) - 1) + M(:,3)).';
%alternative:
%index=(4 * (M(:,[1:2]) - 1) + M(:,[3,3])).'
您可以对所有这三种情况使用基于-

ii = 1:4
row = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,n'),1,[])  %//'
col = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,m'),1,[])  %//'
输入如下所示

案例1:

案例2:

案例3:

您可以对所有这三种情况使用基于-

ii = 1:4
row = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,n'),1,[])  %//'
col = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,m'),1,[])  %//'
输入如下所示

案例1:

案例2:

案例3:

您可以对所有这三种情况使用基于-

ii = 1:4
row = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,n'),1,[])  %//'
col = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,m'),1,[])  %//'
输入如下所示

案例1:

案例2:

案例3:

您可以对所有这三种情况使用基于-

ii = 1:4
row = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,n'),1,[])  %//'
col = reshape(bsxfun(@(A,B) 4 * (B-1) + A,ii,m'),1,[])  %//'
输入如下所示

案例1:

案例2:

案例3:



谢谢我可以知道如何组合这三种情况,只生成
row=[1 1 1 2 2 3 3 3 4 4 4 5 6 7 8 9 10 11 12]
col=[5 9 13 6 10 14 7 11 15 8 12 16 1 2 3 4 17 18 19 20]
@nam假设这些情况的输出为
out1
out2
out3
,您可以这样做:
[out1 out2 out3]
?我得到了您的想法,将三个案例结合起来并使用
bsxfun
。对于另一个问题,您是否认为通过向循环(
i=1:4
)添加约束(嵌套循环?)来达到目的也是可行的?@nam将取决于约束本身。谢谢。我可以知道如何组合这三种情况,只生成
row=[1 1 1 2 2 3 3 3 4 4 4 5 6 7 8 9 10 11 12]
col=[5 9 13 6 10 14 7 11 15 8 12 16 1 2 3 4 17 18 19 20]
@nam假设这些情况的输出为
out1
out2
out3
,您可以这样做:
[out1 out2 out3]
?我得到了您的想法,将三个案例结合起来并使用
bsxfun
。对于另一个问题,您是否认为通过向循环(
i=1:4
)添加约束(嵌套循环?)来达到目的也是可行的?@nam将取决于约束本身。谢谢。我可以知道如何组合这三种情况,只生成
row=[1 1 1 2 2 3 3 3 4 4 4 5 6 7 8 9 10 11 12]
col=[5 9 13 6 10 14 7 11 15 8 12 16 1 2 3 4 17 18 19 20]
@nam假设这些情况的输出为
out1
out2
out3
,您可以这样做:
[out1 out2 out3]
?我得到了您的想法,将三个案例结合起来并使用
bsxfun
。对于另一个问题,您是否认为通过向循环(
i=1:4
)添加约束(嵌套循环?)来达到目的也是可行的?@nam将取决于约束本身。谢谢。我可以知道如何组合这三种情况,只生成
row=[1 1 1 2 2 3 3 3 4 4 4 5 6 7 8 9 10 11 12]
col=[5 9 13 6 10 14 7 11 15 8 12 16 1 2 3 4 17 18 19 20]
@nam假设这些情况的输出为
out1
out2
out3
,您可以这样做:
[out1 out2 out3]
?我得到了您的想法,将三个案例结合起来并使用
bsxfun
。对于另一个问题,您是否认为通过向循环(
i=1:4
)添加约束(嵌套循环?)来达到目的也是可行的?@nam将取决于约束本身。也谢谢您的帮助。也谢谢您的帮助。也谢谢您的帮助。也谢谢您的帮助。也谢谢您的帮助。