在matlab中访问数组的特定块

时间:2014-09-21 14:58:34

标签: matlab

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

现在我有两个变量可以说

B = [ 1 2 3; 4 5 6]
C = [1;2]

然后我想访问1,2,3行第一列A和4,5,6行第二列A,这样我得到这个大小为3x2的结果数组。如何在不使用for循环的情况下在matlab中高效地完成它。

2 个答案:

答案 0 :(得分:1)

使用以下内容:

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

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

最后3x2为

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

答案 1 :(得分:1)

使用linear index构建的bsxfun可以有效地完成此操作:

result = A(bsxfun(@plus, B.', (C.'-1)*size(A,1)));

此方法适用于访问任意数量的A列(即BC中的任意行数。)

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