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

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

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

Используйте функцию 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
        :            :           :
        :            :           :

Извлечение переменных длинной таблицы

Переменные в длинной таблице или длинном расписании - каждый длинные массивы различных базовых типов данных. Стандартные методы индексирования таблиц и расписаний также применяются к длинным таблицам и длинным расписаниям.

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

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

| | | | |

Похожие темы

Была ли эта тема полезной?