在结构的 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
我需要在结构元胞数组中查找索引。例如,给定:
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