chcę zrobićLogical indeksowanie tablicy komórek w MATLAB
myCellArray = myCcellArray{indices}
gdzie indeksy jest zaledwie 0
s i 1
s, z tej samej liczby elementów jak liczba wierszy w myCellArray
, ale to nie działa . Co powinienem zrobić?
chcę zrobićLogical indeksowanie tablicy komórek w MATLAB
myCellArray = myCcellArray{indices}
gdzie indeksy jest zaledwie 0
s i 1
s, z tej samej liczby elementów jak liczba wierszy w myCellArray
, ale to nie działa . Co powinienem zrobić?
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]
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)
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.
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. –