在结构的 matlab 元胞数组中搜索索引

Search indices in matlab cell array of structs

我需要在结构元胞数组中查找索引。例如,给定:

arr{1}.id = 015
arr{2}.id = 015
arr{3}.id = 015
arr{4}.id = 015
arr{5}.id = 037
arr{6}.id = 037
arr{7}.id = 037
arr{8}.id = 037
arr{9}.id = 037
arr{10}.id = 037
arr{11}.id = 040
arr{12}.id = 040
...

我只需要找到对应于 id=037 的索引 (indx = [5 6 7 8 9])

是否有一个简单的 matlabish 解决方案,无需使用循环和搜索每个单独的元素?

矢量化是避免循环和编写快速代码的主要工具。当对许多同类元素应用相同的操作时,可以使用它。虽然在这种情况下您需要相同的操作,但元素不同。使用循环(cellfun 是循环)是唯一的可能。

>> find(cellfun(@(x)(x.id),arr)==37)

ans =

     5     6     7     8     9    10

对于您描述的应用程序,我希望您会重复使用这一行,至少要有干净的代码我建议使用函数

>> cellfield=@(data,field)(cellfun(@(x)(x.(field)),data))

cellfield = 

    @(data,field)(cellfun(@(x)(x.(field)),data))

>> cellfield(arr,'id')

ans =

  Columns 1 through 8

    15    15    15    15    37    37    37    37

  Columns 9 through 12

    37    37    40    40