我在Matlab中运行不同参数集的实验,并希望存储一些标量结果,如均值,方差等。但是参数并不都具有相同的类型,即使在一种类型的参数中,并非所有条目都是相同的尺寸。例如,我有一个参数cellSize
可以是标量,即4
或多个值的矢量,即[4, 6, 10]
。
我发现我可以使用像这样的结构数组s
存储结果(只有一个参数的简化版本):
s = struct('cellSize', []);
s(1).cellSize = 4;
s(2).cellSize = [4, 6, 10];
但我的问题是现在我无法使用例如find(s.cellSize = [4, 6, 10])
搜索与特定参数集匹配的行,因为矩阵维度不一致。
我想以这种方式搜索数据,以便我可以检查结果数据中是否已存在当前参数集的实验。
有没有办法用struct数组做这个或者最好用自己的for循环实现一些东西?或者,是否有更适合我可用于此类数据的数据结构?
提前致谢!
答案 0 :(得分:1)
您可以将特定的支柱字段转换为单元格,并使用cellfun
搜索此单元格数组中的匹配参数:
% generate struct
s = struct('cellSize', []);
s(1).cellSize = 4;
s(2).cellSize = [4, 6, 10];
s(3).cellSize = [5, 5];
% query parameters
q = [4, 6, 10];
% convert field to cell array
c = {s.cellSize};
% find index
idx = find( cellfun(@(x) isequal(x,q),c) ) % idx = 2