2011-08-09 37 views

Odpowiedz

11

Aby wykonać indeksowanie, należy użyć nawiasów zamiast nawiasów klamrowych.

>> 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

Jeśli chcesz wyciąć tablicę komórek, użyj nawiasów. Przykład:

%# 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

Co powiedział amro, należy użyć nawiasów.

Ale inną ważną rzeczą jest użycie booleans nie numerycznych 1 i 0 tutaj.

więc jeśli masz numery

I = [0 0 0 1 0 1] 

należy użyć

myCellArray(I~=0) 

indeksować go. Mylące, tablica boolowska jest wyświetlana jako zer i jedynek w Matlab, chociaż jest ona reprezentowana zupełnie inaczej wewnętrznie.

+2

Technicznie, tablica logiczna jest reprezentowana wewnętrznie tak samo jak tablica uint8 zer i jedynek (jeden bajt na element, ustawiony na 0x00 lub 0x01). Po prostu ma inną flagę typu danych, więc jest inaczej interpretowana. Możesz to sprawdzić, używając 'mxGetElementSize' i' mxGetData', aby zbadać dwa typy tablic w funkcji MEX. –

Powiązane problemy