Длинные массивы являются слишком большими, чтобы уместиться в памяти, таким образом, распространено просмотреть подмножества данных, а не целого массива. Эта страница показывает методы, чтобы извлечь и просмотреть фрагменты длинного массива.
Используйте функцию 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Все длинные массивы поддерживают индексацию круглых скобок. Когда вы индексируете длинный массив с помощью круглых скобок, таких как T(A) или T(A,B), результатом является новый длинный массив, содержащий только заданные строки и столбцы (или переменные). Как большинство других операций на длинных массивах, индексирующие выражения сразу не оценены. Необходимо использовать gather, чтобы оценить операцию индексации. Для получения дополнительной информации смотрите Отсроченную оценку Длинных массивов.
Можно выполнить эти типы индексации в первой размерности длинного массива:
B = A(:,…), где : выбирает все строки в A.
B = A(idx,…), где idx является высоким числовым вектором - столбцом или невысоким числовым вектором.
B = A(L,…), где L является высоким или невысоким логическим массивом той же высоты как A. Например, можно использовать операторы отношения, такие как tt(tt.Var1 < 10,:).
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Получите каждую 100-ю строку из длинной таблицы.
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
: : :
: : :Переменные в длинной таблице или длинном расписании - каждый длинные массивы различных базовых типов данных. Стандартные методы индексирования таблиц и расписаний также применяются к длинным таблицам и длинным расписаниям.
Например, индексируйте длинную таблицу с помощью записи через точку 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
:
:Используйте заполнение клавишей Tab, чтобы искать переменные в таблице, если вы не можете помнить точное имя переменной. Например, введите tt. и затем нажмите Tab. Меню появляется:

Можно также выполнить несколько уровней индексации. Например, извлеките первые 5 элементов в переменном Var2. В этом случае необходимо использовать одну из поддерживаемых форм индексации для длинных массивов в круглых скобках.
tt.Var2(1:5)
ans =
5×1 tall double column vector
0.6737
-0.6691
-0.4003
-0.6718
0.5756См. Доступ к данным в Таблице или Выберите Timetable Data by Row Time и Variable Type для большей информации об индексации.
В порядке конкатенировать два или больше длинных массива, как в [A1 A2 A3 …], каждый из длинных массивов должен быть выведен от единственного длинного массива и, должно быть, не был индексирован по-другому в первой размерности. Индексирующие операции включают функции, такие как 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, чтобы записать массивы (или результаты вычисления) к диску, и затем создать новый datastore, ссылающийся на те местоположения:
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 может быть или новой или существующей переменной в длинной таблице.
Вы не можете присвоить длинные массивы как переменные в постоянном столике, даже если таблица пуста.
Сортировка всех данных в длинном массиве может быть дорогим вычислением. Чаще всего только подмножество строк вначале или конца длинного массива требуется, чтобы отвечать на вопросы как, “Какова первая строка в этом данные к году?”
Функция 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 = datastore('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, чтобы оценить длинный массив и записать результаты в диск вместо этого.
сбор | голова | таблица | хвост | высокий | topkrows