Main Content

테이블 및 타임테이블에 대해 직접 계산

R2023a 이상

인덱싱을 통해 데이터를 추출하지 않고 테이블 및 타임테이블에 대해 직접 계산을 수행할 수 있습니다. 배열에 사용되는 것과 동일한 구문을 사용해 직접 계산을 수행하려면 테이블 및 타임테이블이 다음 여러 가지 조건을 충족해야 합니다.

  • 테이블 및 타임테이블의 모든 변수는 계산을 지원하는 데이터형을 가져야 합니다.

  • 하나의 피연산자만 테이블이나 타임테이블인 경우 연산을 수행하려면 다른 피연산자는 숫자형 배열이거나 논리형 배열이어야 합니다.

  • 두 피연산자 모두 테이블이나 타임테이블인 경우 연산을 수행하려면 이 둘의 크기는 서로 호환되어야 합니다.

이 예제에서는 테이블 및 타임테이블의 요소를 참조하지 않고 연산을 수행하는 방법을 보여줍니다. sum, mean, cumsum처럼 일반적으로 사용되는 수학 함수와 통계 함수도 호출할 수 있습니다. 또한 이 예제에서는 테이블과 타임테이블의 행과 변수가 순서는 서로 다르지만 이름은 동일할 경우(또는 타임테이블에서 행 시간값이 동일할 경우) 연산을 수행하는 방법도 보여줍니다. 지원되는 함수와 연산의 전체 목록과 각각의 사용법과 관련한 규칙을 보려면 Rules for Table and Timetable Mathematics 항목을 참조하십시오.

R2023a 이전 릴리스 또는 숫자형 변수와 숫자형이 아닌 변수가 혼합되어 있는 테이블 또는 타임테이블의 경우는 테이블에 숫자형 데이터와 숫자형이 아닌 데이터가 모두 있는 경우의 계산 항목을 참조하십시오.

테이블에 스케일링 인자 곱하기

간단한 산술 연산은 테이블을 상수로 스케일링하는 것입니다. 모든 테이블 변수가 곱셈을 지원하는 경우 테이블에서 데이터를 추출하지 않고 테이블을 스케일링할 수 있습니다.

예를 들어, readtable 함수를 사용하여 CSV(쉼표로 구분된 값) 파일인 testScoresNumeric.csv의 데이터를 테이블로 읽어옵니다. 샘플 파일에는 3회의 테스트 각각에 대한 10개의 테스트 점수가 포함되어 있습니다.

testScores = readtable("testScoresNumeric.csv")
testScores=10×3 table
    Test1    Test2    Test3
    _____    _____    _____

     90       87       93  
     87       85       83  
     86       85       88  
     75       80       72  
     89       86       87  
     96       92       98  
     78       75       77  
     91       94       92  
     86       83       85  
     79       76       82  

테스트 점수는 100점 스케일을 기반으로 합니다. 이 테스트 점수를 25점 스케일 기반의 점수로 변환하기 위해 테이블에 0.25를 곱합니다. 테이블 및 타임테이블에 곱셈을 수행하려면 times 연산자 .*를 사용합니다.

scaledScores = testScores .* 0.25
scaledScores=10×3 table
    Test1    Test2    Test3
    _____    _____    _____

     22.5    21.75    23.25
    21.75    21.25    20.75
     21.5    21.25       22
    18.75       20       18
    22.25     21.5    21.75
       24       23     24.5
     19.5    18.75    19.25
    22.75     23.5       23
     21.5    20.75    21.25
    19.75       19     20.5

테스트마다 각기 다른 스케일을 사용하고 있다면 테이블에 벡터를 곱할 수 있습니다. 하나의 피연산자만 테이블 또는 타임테이블인 경우 연산을 수행하려면 다른 피연산자는 호환되는 크기를 갖는 스칼라, 벡터, 행렬, 테이블 또는 타임테이블이어야 합니다.

예를 들어, 테스트마다 각기 다른 인자로 가중치를 부여하려면 행 벡터를 사용합니다.

weightedScores = testScores .* [0.2 0.3 0.5]
weightedScores=10×3 table
    Test1    Test2    Test3
    _____    _____    _____

      18     26.1     46.5 
    17.4     25.5     41.5 
    17.2     25.5       44 
      15       24       36 
    17.8     25.8     43.5 
    19.2     27.6       49 
    15.6     22.5     38.5 
    18.2     28.2       46 
    17.2     24.9     42.5 
    15.8     22.8       41 

테이블의 합과 평균 계산하기

테이블은 또한 일반적으로 사용되는 수학 함수와 통계 함수를 지원합니다. 예를 들어, 가중치가 부여된 테스트 점수 테이블의 각 행의 합을 계산합니다. 행별로 합을 계산하기 위해, sum을 호출할 때 테이블의 두 번째 차원을 지정합니다.

sumScores = sum(weightedScores,2)
sumScores=10×1 table
    sum 
    ____

    90.6
    84.4
    86.7
      75
    87.1
    95.8
    76.6
    92.4
    84.6
    79.6

각 테스트의 평균 점수를 계산하기 위해 mean 함수를 사용합니다. 기본적으로 mean은 테이블의 첫 번째 차원인 변수별로 계산합니다.

meanScores = mean(weightedScores)
meanScores=1×3 table
    Test1    Test2    Test3
    _____    _____    _____

    17.14    25.29    42.85

타임테이블의 누적합 계산하기

타임테이블은 테이블이 지원하는 것과 동일한 연산 및 수학 함수와 통계 함수를 지원합니다.

예를 들어, 50초 동안 200Hz로 샘플링된 지진의 본진 진폭을 기록한 타임테이블을 불러오겠습니다. 3개의 타임테이블 변수는 가속도계로 측정된 충격파의 3개 방향 성분에 대응됩니다.

load quakeData
quakeData
quakeData=10001×3 timetable
      Time       EastWest    NorthSouth    Vertical
    _________    ________    __________    ________

    0.005 sec       5            3            0    
    0.01 sec        5            3            0    
    0.015 sec       5            2            0    
    0.02 sec        5            2            0    
    0.025 sec       5            2            0    
    0.03 sec        5            2            0    
    0.035 sec       5            1            0    
    0.04 sec        5            1            0    
    0.045 sec       5            1            0    
    0.05 sec        5            0            0    
    0.055 sec       5            0            0    
    0.06 sec        5            0            0    
    0.065 sec       5            0            0    
    0.07 sec        5            0            0    
    0.075 sec       5            0            0    
    0.08 sec        5            0            0    
      ⋮

충격파의 전파 속도를 계산합니다. 먼저, 타임테이블에 중력 가속도를 곱합니다.

quakeData = 0.098 .* quakeData
quakeData=10001×3 timetable
      Time       EastWest    NorthSouth    Vertical
    _________    ________    __________    ________

    0.005 sec      0.49        0.294          0    
    0.01 sec       0.49        0.294          0    
    0.015 sec      0.49        0.196          0    
    0.02 sec       0.49        0.196          0    
    0.025 sec      0.49        0.196          0    
    0.03 sec       0.49        0.196          0    
    0.035 sec      0.49        0.098          0    
    0.04 sec       0.49        0.098          0    
    0.045 sec      0.49        0.098          0    
    0.05 sec       0.49            0          0    
    0.055 sec      0.49            0          0    
    0.06 sec       0.49            0          0    
    0.065 sec      0.49            0          0    
    0.07 sec       0.49            0          0    
    0.075 sec      0.49            0          0    
    0.08 sec       0.49            0          0    
      ⋮

그런 다음 가속도 데이터를 적분하여 전파 속도를 계산합니다. 각 변수의 누적합을 계산하여 적분의 근삿값을 구할 수 있습니다. 누적합을 타임테이블의 시간 스텝으로 스케일링합니다. cumsum 함수는 입력값과 동일한 크기와 동일한 행 시간값을 갖는 타임테이블을 반환합니다.

speedQuake = (1/200) .* cumsum(quakeData)
speedQuake=10001×3 timetable
      Time       EastWest    NorthSouth    Vertical
    _________    ________    __________    ________

    0.005 sec    0.00245      0.00147         0    
    0.01 sec      0.0049      0.00294         0    
    0.015 sec    0.00735      0.00392         0    
    0.02 sec      0.0098       0.0049         0    
    0.025 sec    0.01225      0.00588         0    
    0.03 sec      0.0147      0.00686         0    
    0.035 sec    0.01715      0.00735         0    
    0.04 sec      0.0196      0.00784         0    
    0.045 sec    0.02205      0.00833         0    
    0.05 sec      0.0245      0.00833         0    
    0.055 sec    0.02695      0.00833         0    
    0.06 sec      0.0294      0.00833         0    
    0.065 sec    0.03185      0.00833         0    
    0.07 sec      0.0343      0.00833         0    
    0.075 sec    0.03675      0.00833         0    
    0.08 sec      0.0392      0.00833         0    
      ⋮

스케일링된 누적합의 평균을 계산합니다. mean 함수는 출력값을 행이 한 개 있는 테이블로 반환합니다.

meanQuake = mean(speedQuake)
meanQuake=1×3 table
    EastWest    NorthSouth    Vertical
    ________    __________    ________

     4.6145       -11.51      -7.2437 

평균을 빼서 스케일링된 누적합을 중심화합니다. 출력값은 각 성분에 대한 전파 속도가 들어 있는 타임테이블입니다.

speedQuake = speedQuake - meanQuake
speedQuake=10001×3 timetable
      Time       EastWest    NorthSouth    Vertical
    _________    ________    __________    ________

    0.005 sec    -4.6121       11.511       7.2437 
    0.01 sec     -4.6096       11.513       7.2437 
    0.015 sec    -4.6072       11.514       7.2437 
    0.02 sec     -4.6047       11.515       7.2437 
    0.025 sec    -4.6023       11.516       7.2437 
    0.03 sec     -4.5998       11.517       7.2437 
    0.035 sec    -4.5974       11.517       7.2437 
    0.04 sec     -4.5949       11.518       7.2437 
    0.045 sec    -4.5925       11.518       7.2437 
    0.05 sec       -4.59       11.518       7.2437 
    0.055 sec    -4.5876       11.518       7.2437 
    0.06 sec     -4.5851       11.518       7.2437 
    0.065 sec    -4.5827       11.518       7.2437 
    0.07 sec     -4.5802       11.518       7.2437 
    0.075 sec    -4.5778       11.518       7.2437 
    0.08 sec     -4.5753       11.518       7.2437 
      ⋮

행의 순서와 변수의 순서가 서로 다른 경우의 연산

테이블과 타임테이블에는 변수가 있으며, 변수는 이름을 가집니다. 테이블 행도 행 이름을 가질 수 있습니다. 그리고 타임테이블 행은 항상 행 시간값을 가집니다. 2개의 테이블 또는 타임테이블에 대해 연산을 수행할 경우 해당 변수와 행은 다음 조건을 충족해야 합니다.

  • 두 피연산자의 크기가 동일하거나, 둘 중 하나는 행이 한 개 있는 테이블이어야 합니다.

  • 두 피연산자가 모두 동일한 이름의 변수를 가져야 합니다. 그러나 각 피연산자의 변수의 순서는 다를 수 있습니다.

  • 두 피연산자가 모두 테이블이고 행 이름을 갖는 경우 이 둘의 행 이름이 동일해야 합니다. 그러나 각 피연산자의 행 이름의 순서는 다를 수 있습니다.

  • 두 피연산자가 모두 타임테이블인 경우 이 둘의 행 시간값이 동일해야 합니다. 그러나 각 피연산자의 행 시간값의 순서는 다를 수 있습니다.

예를 들어, 두 개의 테이블을 만든 다음 둘을 더합니다. 이들 테이블은 변수 이름을 가지지만 행 이름은 없습니다. 변수의 순서는 동일합니다.

A = table([1;2],[3;4],VariableNames=["V1","V2"])
A=2×2 table
    V1    V2
    __    __

    1     3 
    2     4 

B = table([1;3],[2;4],VariableNames=["V1","V2"])
B=2×2 table
    V1    V2
    __    __

    1     2 
    3     4 

C = A + B
C=2×2 table
    V1    V2
    __    __

    2     5 
    5     8 

이번에는 행 이름의 순서와 변수의 순서가 서로 다른 테이블을 2개 만듭니다.

A = table([1;2],[3;4],VariableNames=["V1","V2"],RowNames=["R1","R2"])
A=2×2 table
          V1    V2
          __    __

    R1    1     3 
    R2    2     4 

B = table([4;2],[3;1],VariableNames=["V2","V1"],RowNames=["R2","R1"])
B=2×2 table
          V2    V1
          __    __

    R2    4     3 
    R1    2     1 

이 두 테이블을 더합니다. 결과는 변수와 행이 표현식의 첫 번째 테이블의 변수 및 행과 동일한 순서로 되어 있는 테이블입니다.

C = A + B
C=2×2 table
          V1    V2
          __    __

    R1    2     5 
    R2    5     8 

마찬가지로, 2개의 타임테이블을 더합니다. 결과는 변수와 행 시간값이 첫 번째 타임테이블과 동일한 순서로 되어 있는 타임테이블입니다.

A = timetable(seconds([15;30]),[1;2],[3;4],VariableNames=["V1","V2"])
A=2×2 timetable
     Time     V1    V2
    ______    __    __

    15 sec    1     3 
    30 sec    2     4 

B = timetable(seconds([30;15]),[4;2],[3;1],VariableNames=["V2","V1"])
B=2×2 timetable
     Time     V2    V1
    ______    __    __

    30 sec    4     3 
    15 sec    2     1 

C = A + B
C=2×2 timetable
     Time     V1    V2
    ______    __    __

    15 sec    2     5 
    30 sec    5     8 

참고 항목

| |

관련 항목