【问题标题】:MATLAB: Given A and B, where size(B,1)<size(A,1), return I such that A(I,:) = BMATLAB:给定 A 和 B,其中 size(B,1)<size(A,1),返回 I 使得 A(I,:) = B
【发布时间】:2013-08-14 08:58:31
【问题描述】:

这是我的代码,但我确信 MATLAB 提供了一种更优雅的方式来执行此操作。有什么想法吗?

all = csvread('TRAINING_i.csv');
actual = csvread('TRAINING_INPUTS.csv');
indTraining = zeros(size(actual,1),1);

for i = 1:size(actual,1)

    indTraining(i,1) = find(ismember(all, actual(i,:), 'rows'));

end

【问题讨论】:

    标签: matlab find indices


    【解决方案1】:

    我不知道我是否完全按照,但我认为这就是你想要做的:

    A = [1 2; 
         3 4; 
         5 6; 
         7 8];
    
    B = [3 4; 
         7 8];
    
    for i = 1:size(B,1)
    
        indTraining(i,1) = find(ismember(A, B(i,:), 'rows'));
    
    end
    

    indTraining 现在是[2, 4]。这更容易实现如下:

    [~, indTraining] = ismember(B, A, 'rows')
    

    不需要循环,也不需要find。如果您发现自己在 Matlab 中的一个常用函数上使用 find,则值得首先检查该函数的文档,因为许多常用函数的第二或第三个输出通常是该函数所做的索引,将为您省去麻烦例如max 等的第二个输出

    最后,不要在 matlab 中使用 all 作为变量名,因为您在屏蔽 a very useful function

    【讨论】:

    • 注意我有ismember(B,A... 而不是ismember(A,B... 你需要翻转你的输入。你也不会那样得到0
    • 是的,我的错。我将删除 cmets
    最近更新 更多