我想在matlab中访问数组的特定块。假设我的阵列A大小为10x10。
现在我有两个变量可以说
B = [ 1 2 3; 4 5 6]
C = [1;2]
然后我想访问1,2,3行第一列A和4,5,6行第二列A,这样我得到这个大小为3x2的结果数组。如何在不使用for循环的情况下在matlab中高效地完成它。
答案 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
列(即B
和C
中的任意行数。)
工作原理:bsxfun
根据所需的行和列索引构建线性索引,分别由B
和C
给出。请注意,C.'-1
乘以size(A,1)
,因为线性索引中的新列意味着size(A,1)
的一步。需要转换矩阵B
和C
,以便结果矩阵具有所需的形状。