Indexing Based On Cell Array

1 Ansicht (letzte 30 Tage)
RDG
RDG am 6 Sep. 2012
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 Kommentar
Andrei Bobrov
Andrei Bobrov am 6 Sep. 2012
Bearbeitet: Andrei Bobrov am 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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Arthur
Arthur am 6 Sep. 2012
Bearbeitet: Arthur am 6 Sep. 2012
a is an matrix of 1 row and 50 columns. And like doc sortrow states: "If A is an m-by-n matrix, then B = A(index,:)."
So, initialize a like this, and you're fine:
a = cell(50,1);

Weitere Antworten (0)

Kategorien

Mehr zu Data Types finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by