Массивы Tall используются для работы с данными из памяти, которые поддерживаются datastore. Хранилища данных позволяют работать с большими наборами данных в небольших блоках, которые по отдельности помещаются в память, вместо загрузки всего набора данных в память одновременно. Массивы Tall расширяют эту возможность, позволяя работать с данными, лишенными памяти, используя общие функции.
Так как данные загружаются в память не все сразу, массивы tall могут быть произвольно большими в первом измерении (то есть они могут иметь любое количество строк). Вместо написания специального кода, учитывающего огромный размер данных, например, с помощью таких методов, как MapReduce, массивы tall позволяют работать с большими наборами данных интуитивно, так же, как и с массивами MATLAB ® в памяти. Многие основные операторы и функции работают так же с массивами уровня, как и с массивами в памяти. MATLAB работает с небольшими блоками данных одновременно, обрабатывая все данные в фоновом режиме, так что общие выражения, такие какA+B, работать с наборами больших данных.
В отличие от массивов в памяти, массивы tall обычно остаются невысокими до тех пор, пока вы не запросите выполнение вычислений с помощью gather функция. Этот отложенный анализ позволяет быстро работать с большими наборами данных. Когда вы в конечном итоге запрашиваете вывод с помощью gatherMATLAB объединяет вычисления в очереди, где это возможно, и принимает минимальное количество проходов через данные. Количество проходов через данные сильно влияет на время выполнения, поэтому рекомендуется запрашивать вывод только при необходимости.
Примечание
С тех пор gather возвращает результаты в виде массивов MATLAB в памяти, применяются стандартные требования к памяти. У MATLAB может закончиться память, если результат будет возвращен gather слишком большой.
Высокие таблицы подобны таблицам MATLAB в памяти, за исключением того, что они могут иметь любое количество строк. Чтобы создать высокую таблицу из большого набора данных, сначала необходимо создать хранилище данных для данных. Если хранилище данных ds содержит табличные данные, затем tall(ds) возвращает таблицу высокого уровня или расписание высокого уровня, содержащее данные. Дополнительные сведения о создании хранилищ данных см. в разделе Хранилище данных.
Создайте хранилище данных электронной таблицы, указывающее на табличный файл данных о рейсах авиакомпании. Для папок, содержащих коллекцию файлов, можно указать расположение всей папки или использовать подстановочный символ. '*.csv', для включения в хранилище данных нескольких файлов с одинаковым расширением. Очистка данных путем обработки 'NA' значения как отсутствующие данные, так что tabularTextDatastore заменяет их на NaN значения. Кроме того, задайте формат нескольких текстовых переменных равным %s чтобы tabularTextDatastore считывает их как массивы ячеек символьных векторов.
ds = tabularTextDatastore('airlinesmall.csv'); ds.TreatAsMissing = 'NA'; ds.SelectedFormats{strcmp(ds.SelectedVariableNames,'TailNum')} = '%s'; ds.SelectedFormats{strcmp(ds.SelectedVariableNames,'CancellationCode')} = '%s';
Создайте высокую таблицу из хранилища данных. При выполнении вычислений для этой таблицы высокого уровня нижележащее хранилище данных считывает блоки данных и передает их в таблицу высокого уровня для обработки. Ни в хранилище данных, ни в таблице высокого уровня не хранятся какие-либо из базовых данных.
tt = tall(ds)
tt =
M×29 tall table
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay
____ _____ __________ _________ _______ __________ _______ __________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________
1987 10 21 3 642 630 735 727 'PS' 1503 'NA' 53 57 NaN 8 12 'LAX' 'SJC' 308 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
1987 10 26 1 1021 1020 1124 1116 'PS' 1550 'NA' 63 56 NaN 8 1 'SJC' 'BUR' 296 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
1987 10 23 5 2055 2035 2218 2157 'PS' 1589 'NA' 83 82 NaN 21 20 'SAN' 'SMF' 480 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
1987 10 23 5 1332 1320 1431 1418 'PS' 1655 'NA' 59 58 NaN 13 12 'BUR' 'SJC' 296 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
1987 10 22 4 629 630 746 742 'PS' 1702 'NA' 77 72 NaN 4 -1 'SMF' 'LAX' 373 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
1987 10 28 3 1446 1343 1547 1448 'PS' 1729 'NA' 61 65 NaN 59 63 'LAX' 'SJC' 308 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
1987 10 8 4 928 930 1052 1049 'PS' 1763 'NA' 84 79 NaN 3 -2 'SAN' 'SFO' 447 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
1987 10 10 6 859 900 1134 1123 'PS' 1800 'NA' 155 143 NaN 11 -1 'SEA' 'LAX' 954 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
: : : : : : : : : : : : : : : : : : : : : : : : : : : : :
: : : : : : : : : : : : : : : : : : : : : : : : : : : : :
На дисплее отображается количество строк, M, на данный момент неизвестно. MATLAB отображает некоторые строки и вертикальные эллипсы : указывает, что в таблице высокого уровня существует больше строк, которые в настоящее время не отображаются.
Если у данных, с которыми вы работаете, есть время, связанное с каждой строкой данных, то для работы с данными можно использовать большое расписание. Для получения информации о создании расписаний высокого уровня см. Расширенные возможности (timetable).
В этом случае высокий стол tt имеет время, связанное с каждой строкой, но они разбиты на несколько переменных таблицы, таких как Year, Month, DayofMonthи так далее. Объединение всех этих частей информации datetime в одну новую переменную tall datetime Dates, который основан на времени вылета DepTime. Затем создайте высокое расписание с помощью Dates как время строки. С тех пор Dates является единственной переменной datetime в таблице, table2timetable функция автоматически использует его для времени строки.
hrs = (tt.DepTime - mod(tt.DepTime,100))/100; mins = mod(tt.DepTime,100); tt.Dates = datetime(tt.Year, tt.Month, tt.DayofMonth, hrs, mins, 0); tt(:,1:8) = []; TT = table2timetable(tt)
TT =
M×21 tall timetable
Dates UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay
____________________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ ______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________
21-Oct-1987 06:42:00 'PS' 1503 'NA' 53 57 NaN 8 12 'LAX' 'SJC' 308 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
26-Oct-1987 10:21:00 'PS' 1550 'NA' 63 56 NaN 8 1 'SJC' 'BUR' 296 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
23-Oct-1987 20:55:00 'PS' 1589 'NA' 83 82 NaN 21 20 'SAN' 'SMF' 480 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
23-Oct-1987 13:32:00 'PS' 1655 'NA' 59 58 NaN 13 12 'BUR' 'SJC' 296 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
22-Oct-1987 06:29:00 'PS' 1702 'NA' 77 72 NaN 4 -1 'SMF' 'LAX' 373 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
28-Oct-1987 14:46:00 'PS' 1729 'NA' 61 65 NaN 59 63 'LAX' 'SJC' 308 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
08-Oct-1987 09:28:00 'PS' 1763 'NA' 84 79 NaN 3 -2 'SAN' 'SFO' 447 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
10-Oct-1987 08:59:00 'PS' 1800 'NA' 155 143 NaN 11 -1 'SEA' 'LAX' 954 NaN NaN 0 'NA' 0 NaN NaN NaN NaN NaN
: : : : : : : : : : : : : : : : : : : : : :
: : При извлечении переменной из таблицы высокого уровня или расписания высокого уровня результатом является массив высокого уровня соответствующего базового типа данных. Массив с высоким значением может быть числовым, логическим, datetime, duration, calendar duration, категориальным, строковым или массивом ячеек. Кроме того, можно преобразовать массив в памяти A в высокий массив с tA = tall(A). Массив в памяти A должен иметь один из поддерживаемых типов данных.
Извлеките задержку поступления ArrDelay из высокого расписания TT. При этом создается новая переменная массива высокого уровня с двойным типом данных.
a = TT.ArrDelay
a =
M×1 tall double column vector
8
8
21
13
4
59
3
11
:
: classUnderlying и isaUnderlying функции полезны для определения базового типа данных массива высокого уровня.
Важным аспектом массивов tall является то, что при работе с ними большинство операций выполняются не сразу. Эти операции выполняются быстро, поскольку фактические вычисления откладываются до тех пор, пока вы не запросите выполнение вычислений. Можно инициировать оценку массива высокого уровня с помощью gather (для ввода результата в память) или write (запись результата на диск). Эта отложенная оценка важна, потому что даже простая команда, как size(X) выполнение на высоком массиве с миллиардом строк не является быстрым вычислением.
При работе с массивами tall MATLAB отслеживает все выполняемые операции. Эта информация затем используется для оптимизации количества проходов через данные, которые потребуются при запросе вывода с помощью gather функция. Таким образом, нормально работать с нерасчетными массивами tall и запрашивать выходные данные только тогда, когда это необходимо. Дополнительные сведения см. в разделе Отложенная оценка массивов Tall.
Вычислите среднее и стандартное отклонение задержки поступления. Эти значения используются для построения верхнего и нижнего пороговых значений для задержек, которые находятся в пределах одного стандартного отклонения от среднего значения. Обратите внимание, что результат каждой операции указывает на то, что массив еще не рассчитан.
m = mean(a,'omitnan')m =
tall double
?
Preview deferred. Learn more.s = std(a,'omitnan')s =
tall
?
Preview deferred. Learn more.one_sigma_bounds = [m-s m m+s]
one_sigma_bounds =
M×N×... tall array
? ? ? ...
? ? ? ...
? ? ? ...
: : :
: : :
Preview deferred. Learn more.gatherПреимущество отложенной оценки состоит в том, что когда для выполнения вычислений MATLAB приходит время, часто можно объединить операции таким образом, чтобы минимизировать количество проходов через данные. Так что даже если вы выполняете много операций, MATLAB делает дополнительные проходы через данные только в случае крайней необходимости.
gather функция вынуждает оценивать все поставленные в очередь операции и переносит результирующие выходные данные в память. По этой причине вы можете думать о gather в качестве моста между массивами уровня и массивами в памяти. Например, нельзя управлять if или while петли с использованием высокого логического массива, но после того, как массив будет вычислен с помощью gather он становится логическим массивом в памяти, который можно использовать в этих контекстах.
С тех пор gather возвращает весь результат в MATLAB, необходимо убедиться, что результат умещается в памяти.
Использовать gather вычислять one_sigma_bounds и внести результат в память. В этом случае one_sigma_bounds для вычисления требуется несколько операций, но MATLAB объединяет операции в один проход через данные. Поскольку данные в этом примере малы, gather выполняется быстро. Однако исключение проходов через данные становится более ценным по мере увеличения размера данных.
sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.5 sec Evaluation completed in 1.8 sec sig1 = -23.4572 7.1201 37.6975
Можно указать несколько входов и выходов для gather если вы хотите вычислить сразу несколько массивов tall. Этот метод быстрее, чем вызов gather несколько раз. Например, вычислите минимальную и максимальную задержку поступления. Вычисленное отдельно, каждое значение требует прохождения через данные для вычисления в общей сложности двух проходов. Однако для одновременного вычисления обоих значений требуется только один проход через данные.
[max_delay, min_delay] = gather(max(a),min(a))
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.1 sec
Evaluation completed in 1.1 sec
max_delay =
1014
min_delay =
-64Эти результаты показывают, что в среднем большинство рейсов прибывают с опозданием примерно на 7 минут. Но это в пределах одного стандартного отклонения, чтобы полет был на 37 минут позже или на 23 минут раньше. Самый быстрый рейс в наборе данных прибыл примерно на час раньше, а последний рейс был задержан на много часов.
save функция сохраняет состояние массива высокого уровня, но не копирует данные. Получающееся .mat файл обычно небольшой. Однако для последующего использования исходные файлы данных должны быть доступны в том же месте. load.
write функция создает копию данных и сохраняет копию в виде коллекции файлов, что может занять много места на диске. write выполняет все ожидающие операции с массивом высокого уровня для вычисления значений перед записью. Однажды write копирует данные, они не зависят от исходных необработанных данных. Поэтому можно воссоздать массив высокого уровня из записанных файлов, даже если исходные необработанные данные больше недоступны.
Можно воссоздать массив высокого уровня из записанных файлов, создав новое хранилище данных, которое указывает на расположение, в котором были записаны файлы. Эта функция позволяет создавать контрольные точки или снимки данных массива высокого уровня. Создание контрольной точки - это хороший способ сохранить результаты предварительной обработки данных, чтобы данные были в форме, более эффективной для загрузки.
При наличии массива высокого уровня TA, то вы можете записать его в папку location с помощью команды:
write(location,TA);
Позже, чтобы реконструировать TA из письменных файлов используйте следующие команды:
ds = datastore(location); TA = tall(ds);
Кроме того, можно использовать write функция для запуска оценки массива высокого уровня и записи результатов на диск. Это использование write аналогичен gather, однако, write не приносит результатов в память.
Большинство основных функций работают с массивами высокого уровня так же, как и с массивами в памяти. Однако в некоторых случаях способ работы функции с массивами tall является особым или имеет ограничения. Вы можете определить, поддерживает ли функция массивы tall и имеет ли она какие-либо ограничения, посмотрев в нижней части справочной страницы для функции в разделе Расширенные возможности (например, см. filloutliers).
Отфильтрованный список всех функций MATLAB, поддерживающих массивы tall, см. в разделе Список функций (массивы Tall).
Массивы Tall также поддерживаются несколькими панелями инструментов, что позволяет создавать алгоритмы машинного обучения, развертывать автономные приложения и выполнять вычисления параллельно или в кластере. Дополнительные сведения см. в разделе Расширение массивов с другими продуктами.
datastore | gather | mapreducer | table | tall