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