在matlab中扩展矢量类

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

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

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

或者,甚至更糟

iDate = find(dates == thisDate, 1)

我通常必须做非常类似的操作,所以我想构建一个date-object,为我封装这个功能.通过使用公共属性来完成此操作是微不足道的

dates.datenum(i)
dates.datestr(i)
dates.findOneYearEarlier(i)

等等

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

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

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

我需要两个人同时工作.有没有办法在matlab中完成这个?

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

>而不是拥有一个管理所有日期的对象,每个对象只有一个日期,然后制作这些对象的向量.可能很慢,很难建立查找……
>只需在需要的地方提取datenums矢量,并将其提供给旧代码.随着旧的东西不断得到更新,这使事情变得复杂,而不是让它变得更容易.
>以某种方式扩展矢量级,但我完全不知道从哪里开始.

谢谢你的想法!

最佳答案 你可以直接子类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()
点赞