Matlab 以3个为一组提取列
如果我有一个矩阵是Matlab 以3个为一组提取列,matlab,indexing,Matlab,Indexing,如果我有一个矩阵是16x12 double,那么在循环的每次迭代过程中,我如何能够以3个为一组提取列 e、 g.在循环的第一次迭代中,列1:3被取为: A= 2 3 0 2 3 0 1 3 1 3 0 0 7 7 1 8 7 0 6 6 0 8 8 1 4 3 0 3 2 0 3 3 0 3 2 0 12 12 0 11
16x12 double
,那么在循环的每次迭代过程中,我如何能够以3个为一组提取列
e、 g.在循环的第一次迭代中,列1:3被取为:
A=
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
5 6 0 5 2 0 5 5 0 4 2 0
3 3 0 4 1 0 4 3 0 2 1 0
6 14 0 8 11 0 8 9 0 8 5 0
2 8 0 7 3 0 5 5 0 4 4 0
4 4 0 3 2 0 5 7 0 5 3 0
5 6 1 6 4 0 7 2 0 4 8 1
5 7 1 5 5 0 4 13 0 4 5 0
8 8 0 8 9 0 8 9 0 10 5 0
7 9 0 9 6 0 9 8 1 9 4 0
8 4 1 9 2 0 6 7 1 7 2 0
11 10 0 8 11 1 9 9 0 11 6 0
8 10 1 8 10 0 6 11 0 7 9 0
i=1
i=2
等等
我只知道如何以复杂的方式完成这项工作,为每次迭代指定列,即
for i=1:size(A,2)/3
if i == 1
array = A(:,1:3);
elseif i == 2
array = A(:,4:6);
elseif i == 3
array = A(:,7:9);
elseif i == 4
array = A(:,10:12);
else
end
end
然而,这不允许在每次不改变的情况下容纳不同长度的空间。是否有一种简洁的方式来实现这一点 以下代码在
数据
的列上迭代,每次取3列:
data = [2 3 0 2 3 0 1 3 1 3 0 0;
7 7 1 8 7 0 6 6 0 8 8 1;
4 3 0 3 2 0 3 3 0 3 2 0;
12 12 0 11 10 0 13 14 0 17 10 0];
cols = size(data,2);
per_iteration = 3;
for k=1:per_iteration:cols
selected = data(:,k:(k-1)+per_iteration);
disp(selected);
end
输出
2 3 0
7 7 1
4 3 0
12 12 0
2 3 0
8 7 0
3 2 0
11 10 0
1 3 1
6 6 0
3 3 0
13 14 0
3 0 0
8 8 1
3 2 0
17 10 0
以下代码在数据
的列上迭代,每次取3列:
data = [2 3 0 2 3 0 1 3 1 3 0 0;
7 7 1 8 7 0 6 6 0 8 8 1;
4 3 0 3 2 0 3 3 0 3 2 0;
12 12 0 11 10 0 13 14 0 17 10 0];
cols = size(data,2);
per_iteration = 3;
for k=1:per_iteration:cols
selected = data(:,k:(k-1)+per_iteration);
disp(selected);
end
输出
2 3 0
7 7 1
4 3 0
12 12 0
2 3 0
8 7 0
3 2 0
11 10 0
1 3 1
6 6 0
3 3 0
13 14 0
3 0 0
8 8 1
3 2 0
17 10 0
以下代码在data
的列上迭代,每次取3列:
data = [2 3 0 2 3 0 1 3 1 3 0 0;
7 7 1 8 7 0 6 6 0 8 8 1;
4 3 0 3 2 0 3 3 0 3 2 0;
12 12 0 11 10 0 13 14 0 17 10 0];
cols = size(data,2);
per_iteration = 3;
for k=1:per_iteration:cols
selected = data(:,k:(k-1)+per_iteration);
disp(selected);
end
输出
2 3 0
7 7 1
4 3 0
12 12 0
2 3 0
8 7 0
3 2 0
11 10 0
1 3 1
6 6 0
3 3 0
13 14 0
3 0 0
8 8 1
3 2 0
17 10 0
以下代码在数据
的列上迭代,每次取3列:
data = [2 3 0 2 3 0 1 3 1 3 0 0;
7 7 1 8 7 0 6 6 0 8 8 1;
4 3 0 3 2 0 3 3 0 3 2 0;
12 12 0 11 10 0 13 14 0 17 10 0];
cols = size(data,2);
per_iteration = 3;
for k=1:per_iteration:cols
selected = data(:,k:(k-1)+per_iteration);
disp(selected);
end
输出
2 3 0
7 7 1
4 3 0
12 12 0
2 3 0
8 7 0
3 2 0
11 10 0
1 3 1
6 6 0
3 3 0
13 14 0
3 0 0
8 8 1
3 2 0
17 10 0
有几种方法可以做到这一点。
我认为,最简单的方法是使用一个迭代变量,每次增加三个
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
类似的方法是使用一个增加1的变量,每次通过3*i
选择列3*i
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
一种不需要计数器的破坏性方法可以运行
B = A(:,1:3)
A(:,1:3) = []
每一次都是这样。这会将前三列复制到B,然后将它们从A中删除。有几种方法可以做到这一点。
我认为,最简单的方法是使用一个迭代变量,每次增加三个
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
类似的方法是使用一个增加1的变量,每次通过3*i
选择列3*i
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
一种不需要计数器的破坏性方法可以运行
B = A(:,1:3)
A(:,1:3) = []
每一次都是这样。这会将前三列复制到B,然后将它们从A中删除。有几种方法可以做到这一点。
我认为,最简单的方法是使用一个迭代变量,每次增加三个
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
类似的方法是使用一个增加1的变量,每次通过3*i
选择列3*i
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
一种不需要计数器的破坏性方法可以运行
B = A(:,1:3)
A(:,1:3) = []
每一次都是这样。这会将前三列复制到B,然后将它们从A中删除。有几种方法可以做到这一点。
我认为,最简单的方法是使用一个迭代变量,每次增加三个
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
类似的方法是使用一个增加1的变量,每次通过3*i
选择列3*i
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
一种不需要计数器的破坏性方法可以运行
B = A(:,1:3)
A(:,1:3) = []
每一次都是这样。这会将前三列复制到B,然后从A中删除它们