MATLAB中单元格数组的逻辑索引

时间:2011-08-09 21:42:12

标签: matlab

我想做

myCellArray = myCcellArray{indices} 

其中indices只是0 s和1 s,其元素数与myCellArray中的行数相同,但它不起作用。我该怎么办?

3 个答案:

答案 0 :(得分:12)

您需要使用括号而不是花括号来进行索引。

>> 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 :(得分:1)

如果要切片单元格数组,请使用括号。例如:

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

答案 2 :(得分:0)

amro说的是对的,你应该使用括号。

但另一个关键的事情是在这里使用非数字10的布尔值。

所以,如果你有数字

I = [0 0 0 1 0 1]

你应该使用

myCellArray(I~=0)

将其编入索引。令人困惑的是,布尔数组在Matlab中显示为1和0,尽管它在内部表现得完全不同。