MATLAB:给定A和B,其中大小(B,1)

时间:2013-08-14 08:58:31

标签: matlab find indices

这是我的代码,但我确信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

1 个答案:

答案 0 :(得分: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