Matlab 基于行和列下标创建新矩阵
给定以下4x6矩阵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)作为列下标而
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。这是一种专门的方式,但您应该至少包含一些代码,以使该答案具有说服力。这是一个专门的方法,但你们至少应该包括一些代码,使答案有价值。这样说倒是一种评论。