exponenta event banner

высокий

Создать массив высокого уровня

Описание

пример

t = tall(ds) создает высокий массив поверх хранилища данных ds.

  • Если ds является хранилищем данных для табличных данных (так что read и readall методы возвращаемых хранилищ данных таблиц или расписаний), то t является высокой таблицей или высоким расписанием, в зависимости от конфигурации хранилища данных для возврата. Табличные данные - это данные, которые расположены прямоугольным образом с каждой строкой, имеющей одинаковое количество записей.

  • В противном случае t - массив высоких ячеек.

пример

t = tall(A) преобразует массив в памяти A в высокий массив. Базовый тип данных t является таким же, как class(A). Этот синтаксис полезен, когда необходимо быстро создать массив высокого уровня, например, для отладки или прототипирования алгоритмов.

В R2019b и более поздних версиях массивы в памяти можно преобразовывать в массивы tall для повышения эффективности операций с массивом. После преобразования в массив высокого уровня MATLAB ® избегает создания временных копий всего массива и работает с данными в меньших блоках. Это позволяет выполнять более широкий спектр операций с массивом без нехватки памяти.

Примеры

свернуть все

Преобразование хранилища данных в массив высокого уровня.

Сначала создайте хранилище данных для набора данных. Можно указать полное или относительное расположение файла для набора данных с помощью datastore(location) для создания хранилища данных. location аргумент может указывать:

  • Один файл, например 'airlinesmall.csv'

  • Несколько файлов с одним и тем же расширением, например '*.csv'

  • Целая папка файлов, например 'C:\MyData'

tabularTextDatastore также имеет несколько опций для задания свойств файла и текстового формата при создании хранилища данных.

Создание хранилища данных для airlinesmall.csv набор данных. Удовольствие 'NA' значения как отсутствующие данные, чтобы они были заменены на NaN значения. Выберите небольшое подмножество переменных для работы.

varnames = {'ArrDelay', 'DepDelay', 'Origin', 'Dest'};
ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ...
    'SelectedVariableNames', varnames);

Использовать tall для создания массива высокого уровня для данных в хранилище данных. Так как данные в ds табличный, результат - высокая таблица. Если данные не являются табличными, то tall создает массив высоких ячеек.

T = tall(ds)
T =

  Mx4 tall table

    ArrDelay    DepDelay    Origin      Dest  
    ________    ________    _______    _______

        8          12       {'LAX'}    {'SJC'}
        8           1       {'SJC'}    {'BUR'}
       21          20       {'SAN'}    {'SMF'}
       13          12       {'BUR'}    {'SJC'}
        4          -1       {'SMF'}    {'LAX'}
       59          63       {'LAX'}    {'SJC'}
        3          -2       {'SAN'}    {'SFO'}
       11          -1       {'SEA'}    {'LAX'}
       :           :           :          :
       :           :           :          :

Для работы с массивами уровня можно использовать множество обычных операторов и функций MATLAB ®. Чтобы узнать, работает ли функция с массивами tall, проверьте раздел Extended Capabilities в нижней части страницы ссылки на функцию.

Преобразуйте хранилище данных в таблицу высокого уровня, рассчитайте его размер с помощью отложенного расчета, а затем выполните расчет и верните результат в память.

Сначала создайте хранилище данных для airlinesmall.csv набор данных. Удовольствие 'NA' значения как отсутствующие данные, чтобы они были заменены на NaN значения. Задайте текстовый формат нескольких столбцов так, чтобы они считывались как массив ячеек символьных векторов. Преобразование хранилища данных в таблицу высокого уровня.

ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA');
ds.SelectedFormats{strcmp(ds.SelectedVariableNames, 'TailNum')} = '%s';
ds.SelectedFormats{strcmp(ds.SelectedVariableNames, 'CancellationCode')} = '%s';
T = tall(ds)
T =

  Mx29 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       
     :        :          :             :           :           :            :           :               :              :           :               :                  :              :          :           :           :          :          :          :          :           :               :               :             :               :             :              :                  :
     :        :          :             :           :           :            :           :               :              :           :               :                  :              :          :           :           :          :          :          :          :           :               :               :             :               :             :              :                  :

Отображение таблицы высокого уровня указывает на то, что MATLAB ® еще не знает, сколько строк данных находится в таблице.

Вычислите размер таблицы высокого уровня. Поскольку для вычисления размера массива высокого уровня требуется полный проход через данные, MATLAB вычисляет значение не сразу. Вместо этого, как и в случае большинства операций с массивами tall, результатом является невысокий массив tall, значения и размер которого в настоящее время неизвестны.

s = size(T)
s =

  1x2 tall double row vector

    ?    ?

Используйте gather для выполнения отложенного расчета и возврата результата в память. Результат, возвращенный size - тривиально маленький вектор 1 на 2, который вписывается в память.

sz = gather(s)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.2 sec
Evaluation completed in 1.4 sec
sz = 1×2

      123523          29

Если вы используете gather на невключенном массиве высокого уровня, то результат может не поместиться в память. Если вы не уверены, возвращен ли результат gather может поместиться в памяти, использовать gather(head(X)) или gather(tail(X)) для ввода в память лишь небольшой части результата вычисления.

Создайте массив случайных чисел в памяти, а затем преобразуйте его в массив высокого уровня. Создание tall-массивов из массивов в памяти таким образом полезно для отладки или прототипирования новых программ. Массив в памяти по-прежнему ограничен обычными ограничениями памяти, и даже после преобразования в массив высокого уровня он не может вырасти за пределы памяти.

A = rand(100,4);
tA = tall(A)
tA =

  100x4 tall double matrix

    0.8147    0.1622    0.6443    0.0596
    0.9058    0.7943    0.3786    0.6820
    0.1270    0.3112    0.8116    0.0424
    0.9134    0.5285    0.5328    0.0714
    0.6324    0.1656    0.3507    0.5216
    0.0975    0.6020    0.9390    0.0967
    0.2785    0.2630    0.8759    0.8181
    0.5469    0.6541    0.5502    0.8175
      :         :         :         :
      :         :         :         :

В R2019b и более поздних выпусках при преобразовании массивов в формате in-memory в массивы tall можно выполнять вычисления в массиве, не требуя дополнительной памяти для временных копий данных. Например, этот код нормализует данные в большой матрице, а затем вычисляет сумму всех строк и столбцов. Версия этого расчета в памяти должна не только хранить 5GB массив, но и иметь достаточно памяти для создания временных копий массива.

N = 25000;
tA = tall(rand(N));
tB = tA - mean(tA);
S = gather(sum(tB, [1,2]))
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 2.9 sec
- Pass 2 of 2: Completed in 4.7 sec
Evaluation completed in 8 sec
S = -3.1878e-10

Входные аргументы

свернуть все

Входное хранилище данных, указанное как объект хранилища данных. Дополнительные сведения о создании объекта хранилища данных для набора данных см. в разделе Хранилище данных.

Массивы Tall работают только с детерминированными хранилищами данных. То есть, если вы используете read в хранилище данных, сбросьте хранилище данных с помощью resetзатем снова считывайте хранилище данных, а затем возвращаемые данные должны быть одинаковыми в обоих случаях. Вычисления массива высокого уровня с использованием хранилища данных, которое не является детерминированным, могут привести к непредсказуемым результатам. Дополнительные сведения см. в разделе Выбор хранилища данных для формата файла или приложения.

Пример: ds = tabularTextDatastore('airlinesmall.csv') указывает один файл.

Пример: ds = tabularTextDatastore('*.csv') задает коллекцию .csv файлы.

Пример: ds = spreadsheetDatastore('C:\MyData') указывает папку файлов электронных таблиц.

Пример: ds = datastore('hdfs:///data/') указывает набор данных в файловой системе HDFS.

Переменная в памяти, заданная как массив.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable | string | cell | categorical | datetime | duration | calendarDuration
Поддержка комплексного номера: Да

Выходные аргументы

свернуть все

Высокий массив, возвращаемый как один из следующих типов:

  • При преобразовании хранилища данных t является высокой таблицей или высоким расписанием для табличных хранилищ данных. В противном случае t - массив высоких ячеек.

  • При преобразовании массива в памяти базовый тип данных t является таким же, как class(A).

Сведения об эффективной работе с массивами tall см. в разделе Отложенная оценка массивов Tall.

Совет

  • Для получения информации о том, как использовать массивы tall с:

    • Статистика и машинное обучение Toolbox™

    • Параллельные вычисления Toolbox™

    • Параллельный Server™ MATLAB

    • Toolbox™ базы данных

    • MATLAB Compiler™

Расширенные возможности

Массивы высокого уровня
Вычислять с массивами, в которых больше строк, чем в памяти.

Представлен в R2016b