Массивы Tall слишком велики для размещения в памяти, поэтому обычно просматриваются подмножества данных, а не весь массив. На этой странице показаны методы извлечения и просмотра частей массива высокого уровня.
Используйте head для извлечения первых строк в массиве высокого уровня. head не принудительно вычисляет массив, поэтому необходимо использовать gather для просмотра результата.
tt = tall(table(randn(1000,1),randn(1000,1),randn(1000,1)))
tt =
1,000×3 tall table
Var1 Var2 Var3
________ ________ ________
0.53767 0.6737 0.29617
1.8339 -0.66911 1.2008
-2.2588 -0.40032 1.0902
0.86217 -0.6718 -0.3587
0.31877 0.57563 -0.12993
-1.3077 -0.77809 0.73374
-0.43359 -1.0636 0.12033
0.34262 0.55298 1.1363
: : :
: : :t_head = gather(head(tt))
t_head =
8×3 table
Var1 Var2 Var3
________ ________ ________
0.53767 0.6737 0.29617
1.8339 -0.66911 1.2008
-2.2588 -0.40032 1.0902
0.86217 -0.6718 -0.3587
0.31877 0.57563 -0.12993
-1.3077 -0.77809 0.73374
-0.43359 -1.0636 0.12033
0.34262 0.55298 1.1363Аналогично, можно использовать tail для извлечения нижних строк в массиве высокого уровня.
t_tail = gather(tail(tt))
t_tail =
8×3 table
Var1 Var2 Var3
________ ________ ________
0.64776 0.47349 -0.27077
-0.31763 1.3656 0.43966
1.769 -1.6378 -0.50614
1.5106 2.0237 -0.18435
0.16401 0.77779 0.402
-0.28276 -0.5489 0.53923
1.1522 -0.12601 -0.73359
-1.1465 0.29958 -0.26837Все массивы tall поддерживают индексирование в скобках. При индексировании массива с высоким значением в скобках, например, T(A) или T(A,B)в результате получается новый массив с высоким значением, содержащий только указанные строки и столбцы (или переменные).
Как и большинство других операций с массивами tall, выражения индексирования вычисляются не сразу. Необходимо использовать gather для оценки операции индексирования. Дополнительные сведения см. в разделе Отложенная оценка массивов Tall.
В первом измерении массива высокого уровня можно выполнить следующие типы индексирования:
B = A(:,…), где : выбирает все строки в A.
B = A(idx,…), где idx - высокий числовой вектор столбца или немногочисленный вектор.
B = A(L,…), где L - высокий или невысокий логический массив той же высоты, что и A. Например, можно использовать реляционные операторы, такие как tt(tt.Var1 < 10,:). При индексации массива с высоким логическим массивом существует несколько требований. Каждый из массивов tall:
Должен иметь одинаковый размер в первом измерении.
Должен быть производным от одного массива высокого уровня.
В первом измерении индексация не должна быть другой.
B = A(P:D:Q,…) или B = A(P:Q,…), где P:D:Q и P:Q действительны colon индексирование выражений.
head(tt,k) предоставляет ярлык для tt(1:k,:).
tail(tt,k) предоставляет ярлык для tt(end-k:end,:).
Кроме того, количество указываемых подстрочных индексов зависит от количества измерений в массиве:
Для векторов высоких столбцов можно указать один нижний индекс, например t(1:10).
Для векторов строк высокого уровня, таблиц высокого уровня и расписаний высокого уровня необходимо указать два подстрочных индекса.
Для массивов с двумя или более размерами необходимо указать два или более подстрочных индекса. Например, если массив имеет три измерения, можно использовать такое выражение, как tA(1:10,:,:) или tA(1:10,:), но не линейные индексные выражения, такие как tA(1:10) или tA(:).
Совет
find функция находит ненулевые элементы в векторах высоких столбцов и может быть полезна для генерации вектора индексов для элементов, которые удовлетворяют конкретным условиям. Например, k = find(X<0) возвращает линейные индексы для всех отрицательных элементов в X.
Например, используйте индексирование в скобках для получения первых десяти строк tt.
tt(1:10,:)
ans =
10×3 tall table
Var1 Var2 Var3
________ ________ ________
0.53767 0.6737 0.29617
1.8339 -0.66911 1.2008
-2.2588 -0.40032 1.0902
0.86217 -0.6718 -0.3587
0.31877 0.57563 -0.12993
-1.3077 -0.77809 0.73374
-0.43359 -1.0636 0.12033
0.34262 0.55298 1.1363
: : :
: : :Получение последних 5 значений переменной таблицы Var1.
tt(end-5:end,'Var1')ans =
6×1 tall table
Var1
________
1.769
1.5106
0.16401
-0.28276
1.1522
-1.1465Извлекайте каждую сотую строку из таблицы высокого уровня.
tt(1:100:end,:)
ans =
10×3 tall table
Var1 Var2 Var3
_________ _________ ________
0.53767 0.6737 0.29617
0.84038 -0.041663 -0.52093
0.18323 1.3419 0.052993
0.079934 -0.40492 -1.6163
0.26965 -1.5144 0.98399
-0.079893 -1.6848 -0.91182
0.47586 -2.1746 1.1754
1.9085 -0.79383 0.18343
: : :
: : :Переменные в таблице высокого уровня или расписании высокого уровня представляют собой массивы с различными базовыми типами данных. Стандартные методы индексации таблиц и расписаний также применяются к высоким таблицам и расписаниям, включая использование timerange, withtol, и vartype.
Например, индексировать высокую таблицу с помощью точечной нотации T.VariableName для получения одной переменной данных в виде массива высокого уровня.
tt.Var1
ans =
1,000×1 tall double column vector
0.5377
1.8339
-2.2588
0.8622
0.3188
-1.3077
-0.4336
0.3426
:
:Используйте заполнение вкладки для поиска переменных в таблице, если не удается запомнить точное имя переменной. Например, введите tt. а затем нажмите клавишу Tab. Появится меню:

Можно также выполнять несколько уровней индексирования. Например, извлеките первые 5 элементов в переменной Var2. В этом случае необходимо использовать одну из поддерживаемых форм индексирования для массивов tall в скобках.
tt.Var2(1:5)
ans =
5×1 tall double column vector
0.6737
-0.6691
-0.4003
-0.6718
0.5756Дополнительные сведения об индексировании см. в разделах Доступ к данным в таблицах или Выбор времени в расписании.
Для конкатенации двух или более массивов tall, как в [A1 A2 A3 …]каждый из массивов tall должен быть производным от одного массива tall и не должен индексироваться по-разному в первом измерении. Операции индексирования включают такие функции, как vertcat, splitapply, sort, cell2mat, synchronize, retimeи так далее.
Например, соедините несколько столбцов из tt для создания новой матрицы высокого уровня.
[tt.Var1 tt.Var2]
ans =
1,000×2 tall double matrix
0.5377 0.6737
1.8339 -0.6691
-2.2588 -0.4003
0.8622 -0.6718
0.3188 0.5756
-1.3077 -0.7781
-0.4336 -1.0636
0.3426 0.5530
: :
: :Для объединения больших массивов с различными базовыми хранилищами данных рекомендуется использовать write чтобы записать массивы (или результаты вычислений) на диск, а затем создать одно новое хранилище данных, ссылающееся на эти расположения:
files = {'folder/path/to/file1','folder/path/to/file2'};
ds = datastore(files);Те же правила подстрочного индекса применяются независимо от того, используется ли индексирование для назначения или удаления элементов из массива высокого уровня. Удаление выполняется путем назначения одного или нескольких элементов пустой матрице. [].
Можно назначить элементы в массив высокого уровня с помощью общего синтаксиса A(m,n,...) = B. Высокий массив A должен существовать и иметь непустое второе измерение. Первый подстрочный индекс m должно быть двоеточием : или высокий логический вектор. С таким синтаксисом, B могут быть:
Скаляр
Массив высокого уровня, полученный из A(m,…) где m является тем же самым индексом, что и выше. Например, A(m,1:10).
Пустая матрица, [] (для удаления)
Для индексирования таблиц с использованием синтаксиса A.Var1 = B, массив B должен быть высоким массивом с соответствующим количеством строк. Как правило, B является производным от существующих данных в таблице высокого уровня. Var1 может быть либо новой, либо существующей переменной в таблице высокого уровня.
Массивы tall нельзя назначить в качестве переменных в обычной таблице, даже если таблица пуста.
Сортировка всех данных в массиве высокого уровня может быть дорогостоящим вычислением. Чаще всего только подмножество строк в начале или конце высокого массива требуется для ответа на вопросы типа «Что такое первая строка в этих данных по годам?»
topkrows функция возвращает указанное количество строк в отсортированном порядке для этой цели. Например, использовать topkrows для извлечения 12 верхних строк, отсортированных в порядке убывания по второму столбцу.
t_top12 = gather(topkrows(tt,12,2))
Evaluating tall expression using the Local MATLAB Session:
Evaluation completed in 0.067 sec
t_top12 =
12×3 table
Var1 Var2 Var3
________ ______ ________
-1.0322 3.5699 -1.4689
1.3312 3.4075 0.17694
-0.27097 3.1585 0.50127
0.55095 2.9745 1.382
0.45168 2.9491 -0.8215
-1.7115 2.7526 -0.3384
-0.21317 2.7485 1.9033
-0.43021 2.7335 0.77616
-0.59003 2.7304 0.67702
0.47163 2.7292 0.92099
-0.47615 2.683 -0.26113
0.72689 2.5383 -0.57588 summary функция возвращает полезную информацию о каждой переменной в таблице или расписании высокого уровня, такую как минимальное и максимальное значения числовых переменных и количество вхождений каждой категории для категориальных переменных.
Например, создайте таблицу высокого уровня для outages.csv набор данных и отображение сводной информации. Этот набор данных содержит числовые переменные, переменные datetime и категориальные переменные.
fmts = {'%C' '%D' '%f' '%f' '%D' '%C'};
ds = tabularTextDatastore('outages.csv','TextscanFormats',fmts);
T = tall(ds);
summary(T)Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.16 sec
- Pass 2 of 2: Completed in 0.19 sec
Evaluation completed in 0.46 sec
Variables:
Region: 1,468×1 categorical
Values:
MidWest 142
NorthEast 557
SouthEast 389
SouthWest 26
West 354
OutageTime: 1,468×1 datetime
Values:
Min 2002-02-01 12:18
Max 2014-01-15 02:41
Loss: 1,468×1 double
Values:
Min 0
Max 23418
NumMissing 604
Customers: 1,468×1 double
Values:
Min 0
Max 5.9689e+06
NumMissing 328
RestorationTime: 1,468×1 datetime
Values:
Min 2002-02-07 16:50
Max 2042-09-18 23:31
NumMissing 29
Cause: 1,468×1 categorical
Values:
attack 294
earthquake 2
energy emergency 188
equipment fault 156
fire 25
severe storm 338
thunder storm 201
unknown 24
wind 95
winter storm 145 Многие примеры на этой странице используют gather для вычисления выражений и переноса результатов в память. Однако в этих примерах также тривиально, что результаты умещаются в памяти, поскольку одновременно индексируется только несколько строк.
В случаях, когда вы не уверены, что результат выражения поместится в памяти, рекомендуется использовать gather(head(X)) или gather(tail(X)). Эти команды по-прежнему вычисляют все вычисления в очереди, но возвращают лишь небольшое количество результата, которое гарантированно умещается в памяти.
Если вы уверены, что результат вычисления не поместится в памяти, используйте write чтобы оценить высокий массив и записать результаты на диск.
gather | head | table | tail | tall | topkrows