在给定单元格数组中的内容的情况下查找列索引

时间:2015-09-15 15:21:17

标签: matlab matrix vector cell-array

我试图找出在给定2行单元格数组中的2行值时如何获取列索引。

我不知道为什么我难以解决这个问题,因为你很容易找到1列值。

例如,给出下面的单元格数组:

{1,1,1,2,2,2;'apple','banana','orange','apple','banana','orange'}.'

我想找到column1 = 2和column2 = 'banana'

的位置

输出应为5。

我该怎么做?

2 个答案:

答案 0 :(得分:4)

根据@LuisMendo

,我将假设一个单元阵列
cellarray = {1,1,1,2,2,2;'apple','banana','orange','apple','banana','orange'}.';
values = cell2mat(cellarray(:,1));
tmp1 = values == 1;
tmp2 = strcmp('banana', cellarray(:,2));
tmp3 = tmp1+tmp2;
result = find(tmp3 == 2);

这将从单元格数组中获取值,然后搜索等于1的所有值。然后,它使用strcmp查找与'banana'的所有匹配项,并将该结果添加到通过值获取的逻辑数组中。最后,它搜索两个实例都在哪里,即tmp3等于2

Whoohoo!我的第一个高尔夫球衬里。 59,51字节!

find(((([A{:,1}])==1)'+strcmp('banana',A(:,2)))==2)
 =
         2

答案 1 :(得分:1)

如果您进入code-golfing -

find([A{1,:}]==2 & ismember(A(2,:),'banana'))

示例运行 -

>> A
A = 
    [    1]    [     1]    [     1]    [    2]    [     2]    [     2]
    'apple'    'banana'    'orange'    'apple'    'banana'    'orange'
>> find([A{1,:}]==2 & ismember(A(2,:),'banana'))
ans =
     5