0

在涉足 C# 之后,我现在热衷于在 Matlab 中使用一些 OOP - 迄今为止我还没有做过!

假设我为具有少量属性的数据对象定义了一个类...

classdef TestRigData
    properties
        testTemperature
        sampleNumber
        testStrainAmplitude
        sampleMaterial
        rawData
    end

    methods
        % Some constructors and data manipulation methods in here
    end
end

...其中 'rawData' 将是实际实验数据的 m×n 数组,其他值是双精度值或字符串,以帮助识别每个特定实验。

如果我有一个 TestRigData 对象数组,那么找到满足特定标准(例如 testTemperature == 200)的对象索引的最佳方法是什么?或获取属性的所有唯一值(例如,此集合中的所有唯一样本编号)。

如果它们是它们自己的数组, (myNewArray = [3 5 7 22 60 60 5]) 使用 find() 和 unique() 函数就很容易了。是否有一个我可以从这里继承的类,它允许类似的东西在我的对象数组上工作?还是我必须在我的班级中添加我自己的 find() 和 unique() 方法?

4

2 回答 2

2

您可以将 ID 值(一般情况下为哈希值)分配给TestRigData对象并将其存储为新属性。然后,您可以一次将所有 ID 值提取到一个元胞数组中,例如 {yourarray.id}(或者[yourarray.id]如果 ID 值是标量),您可以轻松地find应用unique

当然,添加你自己findunique当然是可能的,但为什么要让生活变得更艰难呢?;)

于 2013-09-01T15:05:00.910 回答
0

将其创建为句柄类(而不是值类)的建议是我将来需要考虑的更多......在整理了一些初始代码之后,返回并尝试更改classdef TestRigDataclassdef TestRigData < handle似乎会导致问题构造函数。

有点不清楚我将如何使用每个对象独有的哈希值......但将所有值提取到数组的语法最终让我朝着正确的方向前进。

获取一个新的对象数组,它是原始大数据数组的子集,符合某个属性值,很简单:

newObjectArray = oldObjectArray([oldObjectArray.testTemperature]==200);

或者只是指数......

indicesOfInterest = find([oldObjectArray.testTemperature]==200);

或者在非标量值的情况下,例如样本材料的字符串属性......

indicesOfInterest = find(strcmpi({oldObjectArray.sampleMaterial},'steel'));

于 2013-09-02T12:58:13.813 回答