在matlab中访问阵列的特定块

在matlab中访问阵列的特定块,matlab,Matlab,我想在matlab中访问数组的特定块。假设我的数组A的大小为10x10 现在我有两个变量 B = [ 1 2 3; 4 5 6] C = [1;2] 然后我想访问A的第1列的1,2,3行和第2列的4,5,6行,这样我就得到了大小为3x2的结果数组。如何在不使用for循环的情况下在matlab中高效地执行此操作。使用以下命令: A(B(1,:),C(1,1)) A(B(1,:),C(2,1)) 最后是3x2 as D = [A(B(1,:),C(1,1)) A(B(1,:),C(2,1))]

我想在matlab中访问数组的特定块。假设我的数组A的大小为10x10

现在我有两个变量

B = [ 1 2 3; 4 5 6]
C = [1;2]
然后我想访问A的第1列的1,2,3行和第2列的4,5,6行,这样我就得到了大小为3x2的结果数组。如何在不使用for循环的情况下在matlab中高效地执行此操作。

使用以下命令:

A(B(1,:),C(1,1))

A(B(1,:),C(2,1))
最后是3x2 as

D = [A(B(1,:),C(1,1)) A(B(1,:),C(2,1))] ;

这可以通过使用以下内置组件高效完成:

这种方法适用于访问
A
中任意数量的列(即,对于
B
C
中任意数量的行)


工作原理:
bsxfun
根据所需的行和列索引构建线性索引,分别由
B
C
给出。请注意,
C.-1
乘以
size(A,1)
,因为线性索引中的新列意味着
size(A,1)
的步骤。需要对矩阵
B
C
进行换位,以使结果矩阵具有所需的形状

@user12331见编辑后的答案。您应该熟悉线性索引的概念(请参考我答案中的链接)。观察中间结果
bsxfun(@plus,B.,(C.-1)*大小(A,1))
可能会有帮助,以了解其工作原理
result = A(bsxfun(@plus, B.', (C.'-1)*size(A,1)));