我有关联日期的股票价格数据,存储在具有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()