在 Matlab 中使用 find() 比较不同的数据类型
Comparing different data types with find() in Matlab
我 运行 在 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])
搜索与特定参数集匹配的行,因为矩阵维度不一致。
我想以这种方式搜索数据,以便我可以检查结果数据中是否已经存在使用当前参数集的实验。
有没有办法用结构数组来做这个,或者最好自己用 for 循环实现一些东西?或者,是否有更适合我可用于此类数据的数据结构?
提前致谢!
您可以将特定的strut字段转换成cell,然后使用cellfun
在这个cell数组中搜索匹配的参数:
% 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
我 运行 在 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])
搜索与特定参数集匹配的行,因为矩阵维度不一致。
我想以这种方式搜索数据,以便我可以检查结果数据中是否已经存在使用当前参数集的实验。
有没有办法用结构数组来做这个,或者最好自己用 for 循环实现一些东西?或者,是否有更适合我可用于此类数据的数据结构?
提前致谢!
您可以将特定的strut字段转换成cell,然后使用cellfun
在这个cell数组中搜索匹配的参数:
% 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