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

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

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

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

См. также

| | | | |

Похожие темы