Индекс и Просмотр элементов длинного массива

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

Извлечение верхних рядов массива

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

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

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

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

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

  • 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

Получите каждую 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 Data by Row Time и Variable Type для большей информации об индексации.

Конкатенация с длинными массивами

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

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

Присвоение и удаление с длинными массивами

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

“()” Присвоение

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

  • Скаляр

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

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

Смотрите также

| | | | |

Похожие темы