Question

This is my code but I'm sure MATLAB provides a more elegant way to do this. Any thoughts?

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
Était-ce utile?

La solution

I don't know if I follow exactly but I think this is what you're trying to do:

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 now is [2, 4]. This is more easily achieved as follows:

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

No loops needed nor find. If you find yourself using find on a common function in Matlab, it's worth checking the docs on that function first because the second or third output to many common functions is often the indexes of what ever the function did and will save you the trouble e.g. second output of max etc

Lastly don't use all as a variable name in matlab because you're masking a very useful function.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top