Длинные массивы слишком велики, чтобы помещаться в памяти, поэтому обычно просматривать подмножества данных, а не весь массив. На этой странице показаны методы извлечения и просмотра фрагментов длинный массив.
Используйте 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
является tall summeric вектора-столбца или неталльным числовым вектором.
B = A(L,…)
, где L
является tall или non-tall логическим массивом той же высоты, что и A
. Например, можно использовать реляционные операторы, такие как tt(tt.Var1 < 10,:)
. Когда вы индексируете длинный массив с tall logical array, существует несколько требований. Каждый из длинных массивов:
Должен быть тот же размер в первой размерности.
Должен быть выведен из один длинный массив.
В первом измерении индексация по-другому не должна быть выполнена.
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,:)
.
Кроме того, количество нижних индексов, которые вы должны задать, зависит от того, сколько размерности имеет массив:
Для tall векторов-столбцов можно задать один индекс, такой как t(1:10)
.
Для tall векторов-строк, длинных таблиц и длинных расписаний необходимо задать две нижние индексы.
Для длинные массивы с двумя или более размерностями необходимо задать две или более нижних индексов. Для примера, если массив имеет три размерности, можно использовать такое выражение, как tA(1:10,:,:)
или tA(1:10,:)
, но не линейные выражения индексации, такие как tA(1:10)
или tA(:)
.
Совет
find
функция находит ненулевые элементы в tall векторов-столбцов и может быть полезной, чтобы сгенерировать вектор индексов для элементов, которые удовлетворяют конкретным условиям. Для примера, 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.
Порядок объединить два или более длинные массивы, как в [A1 A2 A3 …]
каждый из длинные массивы должен быть выведен из один длинный массив и не должен быть индексирован по-разному в первой размерности. Операции индексации включают такие функции, как vertcat
, splitapply
, sort
, cell2mat
, synchronize
, retime
и так далее.
Например, соедините несколько столбцов из tt
чтобы создать новую tall matrix.
[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
должно быть либо двоеточием :
или tall logical вектор. С помощью этого синтаксиса B
могут быть:
Скаляр
A длинного массива, полученная из 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
функция возвращает полезную информацию о каждой переменной в длинная таблица или timetable, например, минимальное и максимальное значения числовых переменных и количество вхождений каждой категории для категориальных переменных.
Например, создайте длинная таблица для 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