Domanda

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
È stato utile?

Soluzione

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top