Indexing Based On Cell Array
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
randvar=cell(50,1);
for h=1:50
randvar{h}=zeros(10,4);
randvar{h}(:,1)=randi(10,10,1);
randvar{h}(:,2)=randi(5,10,1);
randvar{h}(:,3)=randi(10,10,1);
randvar{h}(:,4)=randi(17,10,1);
end
for counter=1:15
for h=1:50
a{h}=0;
for i=1:10
for j=1:10-i
if randvar{h}(i,1) ~= randvar{h}(i+j,1)
if randvar{h}(i,2)==randvar{h}(i+j,2)
if randvar{h}(i,3)==randvar{h}(i+j,3)
if randvar{h}(i,4)==randvar{h}(i+j,4)
a{h}=a{h}+10;
else
a{h}=a{h}+0;
end
end
end
end
end
end
end
end
[B, IX] = sortrows(a);
least = randvar(IX(1:10));
I don't quite understand why the IX returns 1. Shouldn't it return all the index of the cell array elements? I want to retrieve the first 10 least value for a for randvar.
P/S: My code works when I'm using cell2mat but because there're many loops, converting from cell2mat and mat2cell doesn't seem to be efficient.
1 commentaire
Andrei Bobrov
le 6 Sep 2012
Modifié(e) : Andrei Bobrov
le 6 Sep 2012
a = cell(size(randvar));
for jj = 1:numel(a)
x = randvar{jj};
[b b c] = unique(x(:,1),'first');
y = false(size(c));
y(b) = true;
z = x(y,2:end);
[b b c] = unique(z,'first','rows');
q = true(size(c));
q(b) = false;
a{jj} = nnz(q)*10;
end
[IX, IX] = sortrows(a);
least = randvar(IX(1:10));
or code for loop for..end
for h=1:50
a{h}=0;
for i=1:10
for j=1:10-i
if randvar{h}(i,1) ~= randvar{h}(i+j,1)&&...
isequal(randvar{h}(i,2:end),randvar{h}(i+j,2:end))
a{h}=a{h}+10;
end
end
end
end
Réponse acceptée
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Data Types dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!