테이블 및 타임테이블에 대해 직접 계산
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