请问如何批量提取matlab矩阵中的元素并作为另一个矩阵的坐标?

如有一个mX2的矩阵A,每行保存的是矩阵B部分元素的坐标,想将矩阵B中对应的A中元素置为1,除了循环给每个元素置1,请问还有什么好方法?谢谢。

建议楼上的回答之前自己试一试,以免误人误己。

 

如果要提取矩阵元素,我能想出来的有三种方法,但如果要改变这些位置元素的值,我能想出来的只有一种方法。

示例(为了与其它元素区别,赋值用NaN):

% 生成测试数据
B = magic(5);
B = B(1:3, :)
[r,c] = find(B>20);
A = [r c]

% 将B中以A作为下标的元素置为NaN
B((A(:,2)-1)*size(B,1)+A(:,1)) = NaN

 

输出:

>> B = magic(5);
>> B = B(1:3, :)
B =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
>> [r,c] = find(B>20);
>> A = [r c]
A =
     2     1
     1     2
     3     5
>> B((A(:,2)-1)*size(B,1)+A(:,1)) = NaN
B =
    17   NaN     1     8    15
   NaN     5     7    14    16
     4     6    13    20   NaN

 

附:提取矩阵元素的三种方法:

diag(B(A(:,1),A(:,2)))
arrayfun(@(r,c)B(r,c),A(:,1),A(:,2))
B((A(:,2)-1)*size(B,1)+A(:,1))

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-10
B(A(:,1),A(:,2))=1;
%上叙代码可以实现
相似回答