2011-08-09 9 views

Respuesta

11

Debe usar paréntesis en lugar de llaves para hacer la indexación.

>> arr = cell(2,2); 
>> arr{1,1} = magic(4); 
>> arr{1,2} = 'Hello'; 
>> arr{2,1} = 42; 
>> arr{2,2} = pi; 
>> arr 

arr = 

    [4x4 double] 'Hello' 
    [  42] [3.1416] 

>> idx = logical(zeros(2,2)); 
>> idx(1,1) = true; 
>> idx(2,2) = true; 
>> arr(idx) 

ans = 

    [4x4 double] 
    [ 3.1416] 
1

Si desea dividir una matriz de celdas, use paréntesis. Ejemplo:

%# random cellarray of strings, and a logical indices vector 
myCcellArray = cellstr(num2str((1:10)','value %02d')); %' 
indices = rand(size(myCcellArray)) > 0.5; 

%# slicing 
myCellArray = myCcellArray(indices) 
0

Lo que dijo amro es correcto, debería usar paréntesis.

Pero otra cosa importante es usar booleanos no numéricos 1 y 0 aquí.

por lo que si tienen números

I = [0 0 0 1 0 1] 

se deben utilizar

myCellArray(I~=0) 

para indexarlo. Confusamente, una matriz booleana se muestra como unos y ceros en Matlab, aunque se representa de forma bastante diferente internamente.

+2

Técnicamente, una matriz lógica se representa internamente de la misma manera que una matriz uint8 de unos y ceros (un byte por elemento, establecido en 0x00 o 0x01). Simplemente tiene un indicador de tipo de datos diferente, por lo que se lo interpreta de manera diferente. Puede verificar esto utilizando 'mxGetElementSize' y' mxGetData' para examinar los dos tipos de matriz en una función MEX. –

Cuestiones relacionadas