Логическая индексация массива ячеек в MATLAB - PullRequest
6 голосов
/ 10 августа 2011

Я хочу сделать

myCellArray = myCcellArray{indices} 

, где индексы равны 0 с и 1 с, с тем же количеством элементов, что и количество строк в myCellArray, но это не такРабота.Что мне делать?

Ответы [ 3 ]

12 голосов
/ 10 августа 2011

Для индексации необходимо использовать круглые скобки вместо фигурных скобок.

>> 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 голос
/ 10 августа 2011

Если вы хотите нарезать массив ячеек, используйте скобки. Пример:

%# 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 голосов
/ 10 августа 2011

Что правильно сказал amro, вы должны использовать круглые скобки.

Но другая важная вещь - использовать здесь логические значения, а не числа 1 и 0.

так что если у вас есть номера

I = [0 0 0 1 0 1]

вы должны использовать

myCellArray(I~=0)

чтобы проиндексировать его. Смущает то, что в Matlab логический массив отображается как единица и ноль, хотя он представляется совершенно по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...