Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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 以3个为一组提取列_Matlab_Indexing - Fatal编程技术网

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中删除它们