Индексация финансового объекта временных рядов

Можно также индексировать в объект как с любой другой переменной MATLAB® или структурой. Финансовый объект временных рядов позволяет вам использовать вектор символов даты, массив ячеек векторов символов даты, области значений вектора символов даты или нормальной целочисленной индексации. Вы не можете, однако, индексировать в объект с помощью последовательных дат. Если у вас есть последовательные даты, необходимо сначала использовать команду datestr MATLAB, чтобы преобразовать их в векторы символов даты.

При индексации вектором символов даты отметьте это

  • Каждый вектор символов даты должен содержать день, месяц и год. Допустимые форматы

    • '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); индексируйте =, 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

Смотрите также

| | | | | | | | | | | | | | | | | | | | |

Похожие темы