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