在matlab中扩展矢量类

时间:2014-05-26 08:38:55

标签: matlab oop date vector

我有关联日期的股票价格数据,存储在具有matlab格式的datenums的列向量中。

我经常需要在日期上进行循环或查找,到目前为止,我已经意识到使用了“外部簿记”,例如

for i = 1:length(dates)
    thisDate = dates(i)
end

或更糟糕的

iDate = find(dates == thisDate, 1)

我通常必须做非常类似的操作,所以我想构建一个为我封装此功能的日期对象。通过使用公共属性(例如

)来完成此操作是微不足道的
dates.datenum(i)
dates.datestr(i)
dates.findOneYearEarlier(i)

BUT

我需要能够直接访问向量以保持兼容性。

因此,直接访问我的dates-object需要产生有效的datenum。 例如:

dates(i) == 730910              % right now
dates.datenum(i) == 730910      % how I'm able to do it

我需要两个人同时工作。有没有办法在matlab中实现这个目标?


我提出了一些想法,但我不确定它们是多么富有成效:

  • 而不是拥有一个管理所有日期的对象,每个对象只有一个日期,然后制作这些对象的向量。可能很慢,很难建立查找......

  • 只需在任何需要的地方提取datenums矢量,并将其提供给旧代码。随着旧的东西不断得到更新,这使事情复杂化,而不是让它变得更容易。

  • 以某种方式扩展了vector-class,但我完全不知道从哪里开始。

感谢您的想法!

1 个答案:

答案 0 :(得分:2)

您可以直接继承double

classdef myDateContainer < double

    methods
        % Constructor
        function this = myDataContainer(in)
            if nargin<1 || isempty(in)
                % default: zero
                in = 0;
            end
            this = this@double(in);
        end

        % add datestring functionality
        function str = datestring(this)
            dbl = double(this); %# cast to double to get at the value
            str = datestr(dbl); %# convert
        end
    end
end

使用:

date = myDateContainer(1:100);
date(3:5).datestring()