exponenta event banner

Индексировать и просматривать элементы массива Tall

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

Извлечь верхние строки массива

Используйте 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

Индексирование массивов Tall

Все массивы tall поддерживают индексирование в скобках. При индексировании массива с высоким значением в скобках, например, T(A) или T(A,B)в результате получается новый массив с высоким значением, содержащий только указанные строки и столбцы (или переменные).

Как и большинство других операций с массивами tall, выражения индексирования вычисляются не сразу. Необходимо использовать gather для оценки операции индексирования. Дополнительные сведения см. в разделе Отложенная оценка массивов Tall.

В первом измерении массива высокого уровня можно выполнить следующие типы индексирования:

  • B = A(:,…), где : выбирает все строки в A.

  • B = A(idx,…), где idx - высокий числовой вектор столбца или немногочисленный вектор.

  • B = A(L,…), где L - высокий или невысокий логический массив той же высоты, что и A. Например, можно использовать реляционные операторы, такие как tt(tt.Var1 < 10,:). При индексации массива с высоким логическим массивом существует несколько требований. Каждый из массивов tall:

    • Должен иметь одинаковый размер в первом измерении.

    • Должен быть производным от одного массива высокого уровня.

    • В первом измерении индексация не должна быть другой.

  • 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

Извлекайте каждую сотую строку из таблицы высокого уровня.

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

Извлечь переменные таблицы Tall

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

Используйте заполнение вкладки для поиска переменных в таблице, если не удается запомнить точное имя переменной. Например, введите tt. а затем нажмите клавишу Tab. Появится меню:

Можно также выполнять несколько уровней индексирования. Например, извлеките первые 5 элементов в переменной Var2. В этом случае необходимо использовать одну из поддерживаемых форм индексирования для массивов tall в скобках.

tt.Var2(1:5)
ans =

  5×1 tall double column vector

    0.6737
   -0.6691
   -0.4003
   -0.6718
    0.5756

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

Конкатенация с массивами Tall

Для конкатенации двух или более массивов tall, как в [A1 A2 A3 …]каждый из массивов tall должен быть производным от одного массива tall и не должен индексироваться по-разному в первом измерении. Операции индексирования включают такие функции, как 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 чтобы записать массивы (или результаты вычислений) на диск, а затем создать одно новое хранилище данных, ссылающееся на эти расположения:

files = {'folder/path/to/file1','folder/path/to/file2'};
ds = datastore(files);

Назначение и удаление с помощью массивов Tall

Те же правила подстрочного индекса применяются независимо от того, используется ли индексирование для назначения или удаления элементов из массива высокого уровня. Удаление выполняется путем назначения одного или нескольких элементов пустой матрице. [].

«()» Назначение

Можно назначить элементы в массив высокого уровня с помощью общего синтаксиса A(m,n,...) = B. Высокий массив A должен существовать и иметь непустое второе измерение. Первый подстрочный индекс m должно быть двоеточием : или высокий логический вектор. С таким синтаксисом, B могут быть:

  • Скаляр

  • Массив высокого уровня, полученный из A(m,…) где m является тем же самым индексом, что и выше. Например, A(m,1:10).

  • Пустая матрица, [] (для удаления)

“.” Назначение

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

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

Извлечь указанное количество строк в сортированном порядке

Сортировка всех данных в массиве высокого уровня может быть дорогостоящим вычислением. Чаще всего только подмножество строк в начале или конце высокого массива требуется для ответа на вопросы типа «Что такое первая строка в этих данных по годам?»

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

Обобщить содержимое массива Tall

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

Например, создайте таблицу высокого уровня для 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 чтобы оценить высокий массив и записать результаты на диск.

См. также

| | | | |

Связанные темы