我有矩阵X和A在哪里 X = [x1,y1,1,1; x2,y2,1,3; x3,y,2,4] A = [1,1,0; 1,3,1; 1,4,2]
我想: 1.扫描X中每一行的最后两列(仅供参考,这两个数字组合是唯一的) 2.在A的前两列中找到这些值 3.获取A行中最后一列的值。
例如,对于X的第一行,我得到1和1,所以我找到A中的前两列的1和1(看起来是第一行),所以我想得到的数字是0
我认为我可以使用循环和“查找”功能来实现它,如果它只是我正在使用的一个数字,但我是matlab的新手并且在两个数字的组合上遇到了麻烦。我很感激你的帮助!
答案 0 :(得分:1)
ismember
函数可能是您正在寻找的函数,以及()
和:
运算符,用于从数组中提取列。
% Map rows in X to rows in A
[tf,loc] = ismember(X(:,[3 4]), A(:,[1 2]), 'rows');
% Grab the corresponding value from A
rslt = A(loc, 3);
现在你有一个逻辑向量tf
,它指示X中的每一行是否在A中找到,loc
,它将相应的索引保存到A的行中。匹配。然后使用这些索引索引到A以拉出"值"或因变量列。这些是矢量化操作,因此它比使用循环和find()
更快。
仔细阅读ismember
,unique
,paren
的文档及其引用的功能,以获取更多有关Matlab功能的背景信息,以便进行此类记录搜索。< / p>