Можно также индексировать объект, как и любую другую переменную или структуру MATLAB ®. Объект финансового временного ряда позволяет использовать вектор символов даты, массив ячеек векторов символов даты, диапазон векторов символов даты или нормальное целочисленное индексирование. Однако индексирование в объект с использованием серийных дат невозможно. При наличии серийных дат сначала следует использовать MATLAB.datestr для преобразования их в векторы символов даты.
При индексировании по вектору символов даты обратите внимание, что
Каждый вектор символов даты должен содержать день, месяц и год. Допустимые форматы:
'ddmmmyy hh:mm' или 'ddmmmyyyy hh:mm'
'mm/dd/yy hh:mm' или 'mm/dd/yyyy hh:mm'
'dd-mmm-yy hh:mm' или 'dd-mmm-yyyy hh:mm'
'mmm.dd,yy hh:mm' или 'mmm.dd,yyyy hh:mm'
Все данные приходятся на конец указанного периода времени, то есть еженедельные данные приходятся на пятницы, ежемесячные данные приходятся на конец каждого месяца и так далее, всякий раз, когда данные проходят через преобразование частоты.
При индексировании вектора символов даты значения в объекте финансового временного ряда для определенной даты получаются с использованием вектора символов даты в качестве индекса в объекте. Аналогично, если в объекте требуются значения для нескольких дат, можно поместить эти векторы символов даты в массив символов ячейки и использовать массив ячеек в качестве индекса объекта. Вот несколько примеров.
В этом примере извлекаются все значения для 11 мая 1999 г. из myfts:
format short myfts1('05/11/99')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (1)' 'series1: (1)' 'series2: (1)'
'11-May-1999' [ 2.8108] [ 0.9323]
Следующий пример извлекает только series2 значения за 11 мая 1999 года от myfts:
myfts1.series2('05/11/99')Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (1)' 'series2: (1)'
'11-May-1999' [ 0.9323]
В третьем примере извлекаются все значения для трех различных дат:
myfts1({'05/11/99', '05/21/99', '05/31/99'})Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (3)' 'series1: (3)' 'series2: (3)'
'11-May-1999' [ 2.8108] [ 0.9323]
'21-May-1999' [ 0.9050] [ 1.2445]
'31-May-1999' [ 1.4266] [ 0.6470]
Следующий пример извлекает только series2 значения для тех же трех дат:
myfts1.series2({'05/11/99', '05/21/99', '05/31/99'})Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (3)' 'series2: (3)'
'11-May-1999' [ 0.9323]
'21-May-1999' [ 1.2445]
'31-May-1999' [ 0.6470]Финансовый временной ряд уникален, поскольку позволяет индексировать объект с использованием диапазона векторов символов даты. Диапазон векторов символов даты состоит из двух векторов символов даты, разделенных двумя двоеточиями (::). В MATLAB этот разделитель называется оператором двойной двоеточия. Пример диапазона векторов символов даты MATLAB: '05/11/99::05/31/99'. Оператор предоставляет все точки данных, доступные между этими датами, включая даты начала и окончания.
Ниже приведены примеры диапазона векторов символов даты:
myfts1 ('05/11/99::05/15/99')Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (5)' 'series1: (5)' 'series2: (5)'
'11-May-1999' [ 2.8108] [ 0.9323]
'12-May-1999' [ 0.2454] [ 0.5608]
'13-May-1999' [ 0.3568] [ 1.5989]
'14-May-1999' [ 0.5255] [ 3.6682]
'15-May-1999' [ 1.1862] [ 5.1284]
myfts1.series2('05/11/99::05/15/99')Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (5)' 'series2: (5)'
'11-May-1999' [ 0.9323]
'12-May-1999' [ 0.5608]
'13-May-1999' [ 1.5989]
'14-May-1999' [ 3.6682]
'15-May-1999' [ 5.1284]Как и для любой другой переменной или структуры MATLAB, вывод можно присвоить другой переменной объекта:
nfts = myfts1.series2('05/11/99::05/20/99');
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. > In fints/subsref (line 106)
nfts является таким же, как ans во втором примере.
Если одна из дат не существует в объекте, сообщение об ошибке указывает, что один или оба индекса даты находятся вне диапазона доступных дат в объекте. Можно либо отобразить содержимое объекта, либо использовать команду ftsbound для определения первой и последней дат в объекте.
Целочисленная индексация является нормальной формой индексации в MATLAB. Индексация начинается в 1 (не 0); index = 1 соответствует первому элементу, индекс = 2 ко второму элементу, индекс = 3 к третьему элементу и так далее. Вот несколько примеров со ссылками на ряды данных и без них.
Получить первый элемент в series2:
myfts1.series2(1)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (1)' 'series2: (1)'
'11-May-1999' [ 0.9323]
Получите первый, третий и пятый элементы в series2:
myfts1.series2([1, 3, 5])
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (3)' 'series2: (3)'
'11-May-1999' [ 0.9323]
'13-May-1999' [ 1.5989]
'15-May-1999' [ 5.1284]
Получить элементы 16-20 в series2:
myfts1.series2(16:20)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (5)' 'series2: (5)'
'26-May-1999' [ 0.2105]
'27-May-1999' [ 1.8916]
'28-May-1999' [ 0.6673]
'29-May-1999' [ 0.6681]
'30-May-1999' [ 1.0877]
Получение позиций с 16 по 20 в объекте финансового временного ряда myfts:
myfts1(16:20)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
ans =
desc: (none)
freq: Unknown (0)
'dates: (5)' 'series1: (5)' 'series2: (5)'
'26-May-1999' [ 0.7571] [ 0.2105]
'27-May-1999' [ 1.2425] [ 1.8916]
'28-May-1999' [ 1.8790] [ 0.6673]
'29-May-1999' [ 0.5778] [ 0.6681]
'30-May-1999' [ 1.2581] [ 1.0877]
Получить последний элемент в myfts1:
myfts1(end)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/end (line 57)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/subsref (line 106)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/display (line 66)
ans =
desc: (none)
freq: Unknown (0)
'dates: (1)' 'series1: (1)' 'series2: (1)'
'19-Aug-1999' [ 1.4692] [ 3.4238]
В этом примере используется специальная переменная MATLAB. end, который указывает на последний элемент объекта при использовании в качестве индекса. Пример возвращает объект, содержимое которого является значением в объекте myfts в последней записи даты.
При наличии информации о времени суток в объекте финансового временного ряда допускается индексирование векторов целочисленных символов и символов даты. Можно индексировать объект как с указанием даты, так и времени, но не только с указанием времени суток. Чтобы показать, как индексирование работает с данными времени суток, создайте объект финансового временного ряда с именем timeday содержащий спецификацию времени:
dates = ['01-Jan-2001';'01-Jan-2001'; '02-Jan-2001'; ... '02-Jan-2001'; '03-Jan-2001';'03-Jan-2001']; times = ['11:00';'12:00';'11:00';'12:00';'11:00';'12:00']; dates_times = cellstr([dates, repmat(' ',size(dates,1),1),... times]); timeday = fints(dates_times,(1:6)',{'Data1'},1,'My first FINTS')
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints (line 165)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/display (line 66)
timeday =
desc: My first FINTS
freq: Daily (1)
'dates: (6)' 'times: (6)' 'Data1: (6)'
'01-Jan-2001' '11:00' [ 1]
' " ' '12:00' [ 2]
'02-Jan-2001' '11:00' [ 3]
' " ' '12:00' [ 4]
'03-Jan-2001' '11:00' [ 5]
' " ' '12:00' [ 6]
Использовать целочисленное индексирование для извлечения второго и третьего элементов данных из timeday:
timeday(2:3)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints (line 165)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/display (line 66)
ans =
desc: My first FINTS
freq: Daily (1)
'dates: (2)' 'times: (2)' 'Data1: (2)'
'01-Jan-2001' '12:00' [ 2]
'02-Jan-2001' '11:00' [ 3]
Для индексирования вектора символов даты заключите векторы символов даты и времени в одну пару кавычек. Если имеется одна дата с несколькими временами, индексирование только с датой возвращает данные для всех времен для этой конкретной даты. Например, команда timeday('01-Jan-2001') возвращает данные для всех времен 1 января 2001 года:
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints (line 165)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/display (line 66)
ans =
desc: My first FINTS
freq: Daily (1)
'dates: (2)' 'times: (2)' 'Data1: (2)'
'01-Jan-2001' '11:00' [ 1]
' " ' '12:00' [ 2]Можно также указать определенную дату и время:
timeday('01-Jan-2001 12:00')Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints (line 165)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/display (line 66)
ans =
desc: My first FINTS
freq: Daily (1)
'dates: (1)' 'times: (1)' 'Data1: (1)'
'01-Jan-2001' '12:00' [ 2]
Используйте оператор двойной двоеточия :: для указания диапазона дат и времени:
timeday('01-Jan-2001 12:00::03-Jan-2001 11:00')Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints (line 165)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead.
> In fints/display (line 66)
ans =
desc: My first FINTS
freq: Daily (1)
'dates: (4)' 'times: (4)' 'Data1: (4)'
'01-Jan-2001' '12:00' [ 2]
'02-Jan-2001' '11:00' [ 3]
' " ' '12:00' [ 4]
'03-Jan-2001' '11:00' [ 5]
Удовольствие timeday как структура MATLAB, если требуется получить содержимое определенного поля. Например, чтобы найти время суток, включенное в этот объект, введите
datestr(timeday.times)
Warning: FINTS will be removed in a future release. Use TIMETABLE instead. > In fints/subsref (line 106) ans = 11:00 AM 12:00 PM 11:00 AM 12:00 PM 11:00 AM 12:00 PM
ascii2fts | boxcox | convertto | datestr | diff | fillts | filter | fints | fts2mat | ftsbound | lagts | leadts | peravg | resamplets | smoothts | toannual | todaily | tomonthly | toquarterly | tosemi | toweekly | tsmovavg