【问题标题】:Comparing different data types with find() in Matlab在 Matlab 中使用 find() 比较不同的数据类型
【发布时间】:2017-05-02 13:43:30
【问题描述】:

我在 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 循环来实现一些东西?或者,是否有更合适的数据结构可用于此类数据?

提前致谢!

【问题讨论】:

    标签: arrays matlab data-structures parameters dimensions


    【解决方案1】:

    您可以将特定的strut字段转换为单元格,并使用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
    

    【讨论】:

    • 谢谢!然后我可以使用多个条件,例如idx = find( cellfun(@(x) isequal(x,q),c) & s.nBins == 10 )?
    • 如果nBins 只是一个标量字段,您可以这样做,但使用[s.nBins] == 10
    • 酷我明白了 :) 再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2019-08-06
    • 2016-02-09
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多