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