Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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 - Fatal编程技术网

Matlab 基于行和列下标创建新矩阵

Matlab 基于行和列下标创建新矩阵,matlab,Matlab,给定以下4x6矩阵A: A = [ 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ]; 以及包含行和列下标的两个变量(r和c): 我想创建一个新的5x3矩阵B,它从r和c中获取每一行和每一列的组合,以便: B = [ 10 12 15 10 11 13 22 23 27 22 25 26 28 32 33 ]; 请注意,元素B(1,1)是通过使用r(1,1)作为行下标和c(1,1)作为列下标而

给定以下4x6矩阵
A

A = [
10 11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27
28 29 30 31 32 33
];
以及包含行和列下标的两个变量(
r
c
):

我想创建一个新的5x3矩阵
B
,它从
r
c
中获取每一行和每一列的组合,以便:

B = [
10 12 15
10 11 13
22 23 27
22 25 26
28 32 33
]; 
请注意,元素
B(1,1)
是通过使用
r(1,1)
作为行下标和
c(1,1)
作为列下标而导出的。元素
B(1,2)
r(1,2)
c(1,2)
作为行和列的下标。等等

我可以使用嵌套for循环来解决这个问题,但是我正在处理的实际应用程序有非常大的矩阵,这种方法导致了一个严重的瓶颈。是否有更好(阅读:更快)的替代方案

用于参考的
循环:

B = NaN(size(r,1),size(c,2));
for row=1:size(r,1)
    for col=1:size(c,2)
        B(row,col) = A(r(row,col),c(row,col));
    end
end

是的,您可以使用单个索引值为2D矩阵编制索引,该索引值是列的串联,就像将矩阵逐列转换为向量一样。例如,只需使用
A(8)
即可访问
A(4,2)

因此,您需要做的就是创建一个新的索引矩阵,然后在这些值处访问a:

% input data array
A = [10 11 12 13 14 15;
16 17 18 19 20 21;
22 23 24 25 26 27;
28 29 30 31 32 33];

% number of rows
N_rows = size(A,1);

% row indices
r = [1 1 1;
1 1 1;
3 3 3;
3 3 3;
4 4 4];

% column indices
c = [1 3 6;
1 2 4;
1 2 6;
1 4 5;
1 5 6];

% element indices
idx = (c - 1)*N_rows + r;

% new indexed array
B = A(idx);

% display outputs
disp(B)

是的,您可以使用单个索引值为2D矩阵编制索引,该索引值是列的串联,就像将矩阵逐列转换为向量一样。例如,只需使用
A(8)
即可访问
A(4,2)

因此,您需要做的就是创建一个新的索引矩阵,然后在这些值处访问a:

% input data array
A = [10 11 12 13 14 15;
16 17 18 19 20 21;
22 23 24 25 26 27;
28 29 30 31 32 33];

% number of rows
N_rows = size(A,1);

% row indices
r = [1 1 1;
1 1 1;
3 3 3;
3 3 3;
4 4 4];

% column indices
c = [1 3 6;
1 2 4;
1 2 6;
1 4 5;
1 5 6];

% element indices
idx = (c - 1)*N_rows + r;

% new indexed array
B = A(idx);

% display outputs
disp(B)
您可以使用该函数将下标(r,c)转换为线性索引(“单个索引值”)

如果需要反向转换,请使用ind2sub。

您可以使用该函数将下标(r,c)转换为线性索引(“单个索引值”)


如果您需要反向转换,请使用ind2sub。

这是一种专门的方式,但您应该至少包含一些代码,以使该答案具有说服力。这是一个专门的方法,但你们至少应该包括一些代码,使答案有价值。这样说倒是一种评论。