Длинные массивы являются слишком большими, чтобы уместиться в памяти, таким образом, распространено просмотреть подмножества данных, а не целого массива. Эта страница показывает методы, чтобы извлечь и просмотреть фрагменты длинного массива.
Используйте 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
: : :
: : :Переменные в длинной таблице или длинном расписании - каждый длинные массивы различных базовых типов данных. Стандартные методы индексирования таблиц и расписаний также применяются к длинным таблицам и длинным расписаниям, включая использование timerangewithtol, и 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
:
:Используйте заполнение клавишей 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 …], каждый из длинных массивов должен быть выведен из одного длинного массива и, должно быть, не был индексирован по-другому в первой размерности. Индексирующие операции включают функции, такие как vertcatsplitapplyвидcell2matсинхронизацияповторная синхронизация, и так далее.
Например, конкатенируйте несколько столбцов от 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.57588summary функция возвращает полезную информацию о каждой переменной в длинной таблице или расписании, таком как минимальные и максимальные значения числовых переменных и количество случаев каждой категории для категориальных переменных.
Например, составьте длинную таблицу для 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 оценивать длинный массив и писать результаты в диск вместо этого.
gather | head | table | tail | tall | topkrows