색인 표기법

Index notation

수학컴퓨터 프로그래밍에서 색인 표기법은 숫자 배열의 요소를 지정하는 데 사용된다. 지수를 어떻게 사용하는지에 대한 형식주의는 주제에 따라 다르다. 특히 출판을 위해 정식 수학적 논문을 쓰는 것인지, 컴퓨터 프로그램을 작성하는 것인지에 따라 목록이나 벡터, 매트릭스의 요소를 참조하는 방법이 다르다.

수학에서는

첨자를 사용하여 배열의 요소를 참조하는 것은 수학에서 자주 도움이 된다. 첨자는 정수 또는 변수일 수 있다. 배열은 다차원 배열로 처리될 수 있기 때문에 일반적으로 텐서 형태를 취한다. 벡터(1d 어레이)와 매트릭스(2d 어레이)가 특수(보다 친숙한) 사례다.

다음은 개념에 대한 소개일 뿐이다: 지수 표기법은 수학(특히 텐서 연산의 표현과 조작에 있어서)에서 더 자세하게 사용된다. 자세한 내용은 주요 기사를 참조하십시오.

1차원 배열(벡터)

행 벡터 또는 컬럼 벡터로 쓰임으로써 숫자의 배열로 취급되는 벡터(둘 중 어느 것이 사용되든 편의나 맥락에 따라 달라짐):

지수 표기법은 n-dimension 때문에 지수 I가 1에서 n까지 실행되는 것으로 알려진 ai 단순히 작성함으로써 배열의 요소를 표시할 수 있다.[1] 예를 들어 벡터:

몇 가지 항목이

= 2= = .

이 표기법은 수학과 물리학의 벡터에 적용할 수 있다. 다음 벡터 방정식

벡터(일명 성분)의 원소(일명 성분)에 대해서도 쓸 수 있다.

여기서 지표가 일정한 범위의 값을 취한다. 이 식은 각 지수마다 하나씩 방정식 집합을 나타낸다. 벡터 각각에 n개의 원소, 즉 i = 1,2,n이 있는 경우 방정식은 명시적으로

따라서, 지수 표기법은 에 대한 효율적인 속기 역할을 한다.

  1. 일반적인 구조를 방정식으로 나타냄
  2. 개별 구성요소에 적용 가능한 경우.

2차원 배열

행렬 A의 요소는 두 개의 첨자 또는 지수로 설명된다.

행렬의 요소와 같은 2개 이상의 차원으로 숫자 배열을 설명하기 위해 두 개 이상의 인덱스를 사용한다(오른쪽 이미지 참조).

행렬 A의 입력은 지수를 구분하기 위한 쉼표를 포함하거나i,j 포함하지 않고 ij라는 두 개의 지수를 사용하여 작성된다. 여기ij 첫 번째 첨자는 행 번호이고 두 번째 첨자는 열 번호다. 병렬은 또한 곱셈을 위한 표기법으로도 사용된다; 이것은 혼란의 원인이 될 수 있다. 예를 들어, 다음과 같다.

몇 가지 항목이

= a = a = , =

9보다 큰 지수의 경우 쉼표 기반 표기법이 선호될 수 있다(312: a 대신 a3,12).

행렬 방정식은 다음과 같이 벡터 방정식과 유사하게 작성된다.

행렬 요소(일명 구성 요소)의 측면에서

ij의 모든 가치에 대해서. 다시 말하지만, 이 식은 각 지수마다 하나씩 방정식의 집합을 나타낸다. 행렬이 각각 m 행과 n 열(i = 1, 2, …, m j = 1, 2, …, n)을 갖는 경우 mn 방정식이 있다.

다차원 배열

이 표기법은 다차원 요소 배열인 텐더에 대한 명확한 일반화를 가능하게 한다. 예를 들어,

여러 방정식의 집합을 나타냄

텐서 분석에서 위첨자는 공변량과 상변성을 구별하기 위해 첨자 대신 사용된다. 벡터지수의 공분산편차를 참조한다.

컴퓨팅에서

몇몇 프로그래밍 언어에서 색인 표기법은 배열의 요소들을 다루는 한 방법이다. 이 방법은 첫 번째 요소의 주소를 기준으로 사용하는 조립 언어로 구현되는 방법과 가장 가깝기 때문에 사용되며, 요소 크기의 다중(지수)를 사용하여 배열 내부를 처리한다.

예를 들어, 정수의 배열이 주소 3000(기본 주소)을 가진 메모리 셀에서 시작하는 컴퓨터 메모리 영역에 저장되고 각 정수가 4개의 셀(바이트)을 차지한다면, 이 배열의 요소는 메모리 위치 0x3000, 0x3004, 0x3008, …, 0x3000 + 4(n - 1)에 있다. 일반적으로 기본 주소 b와 요소 크기 s를 가진 배열의 ith 요소의 주소는 b +이다.

이행내역

C 프로그래밍 언어에서는 의 내용을 다음과 같이 쓸 수 있다. *(base + i) (일반 양식) 또는 base[i] (어레이 인덱싱 양식) C 표준이 어레이 인덱싱 양식을 포인터 폼으로 변환하는 것으로 정의하기 때문에 정확히 동일하다. 공교롭게도 포인터 추가는 역순이기 때문에 다음과 같은 모호한 표현이 가능하다. 3[base] 에 해당하는 base[3].[2]

다차원 배열

예를 들어 2차원 표와 같이 둘 이상의 인덱스를 가진 배열을 고려할 때 상황은 더 흥미로워진다. 우리는 세 가지 가능성을 가지고 있다:

  • 둘로부터 단일 지수를 계산하여 2차원 배열을 1차원화하다.
  • 각 요소가 다른 1차원 배열, 즉 배열의 배열인 1차원 배열을 고려한다.
  • 추가 저장소를 사용하여 원본 배열의 각 행의 주소 배열을 보관하고 원본 배열의 행을 별도의 1차원 배열로 저장함

C에서는 세 가지 방법을 모두 사용할 수 있다. 첫 번째 방법을 사용할 때 프로그래머는 컴퓨터 메모리에 배열된 요소들이 어떻게 배치되는지를 결정하고, 각 요소의 위치를 계산하는 공식을 제공한다. 두 번째 방법은 각 행의 요소 수가 동일하고 프로그램이 작성될 때 알 수 있을 때 사용된다. 프로그래머는 예를 들어, 작성함으로써 배열의 세 개의 컬럼을 갖는다고 선언한다. elementtype tablename[][3];. 그 중 하나는 작성함으로써 배열의 특정 요소를 가리킨다. tablename[first index][second index]컴파일러는 각 행이 점유한 메모리 셀의 총 수를 계산하고, 첫 번째 인덱스를 사용하여 원하는 행의 주소를 찾은 다음, 두 번째 인덱스를 사용하여 행에서 원하는 요소의 주소를 찾는다. 세 번째 방법을 사용할 때 프로그래머는 테이블이 에서처럼 포인터의 배열이라고 선언한다. elementtype *tablename[];. 프로그래머가 이후에 특정 요소를 지정한 경우 tablename[first index][second index]컴파일러는 첫 번째 인덱스에 의해 지정된 행의 주소를 조회하는 명령을 생성하고, 두 번째 인덱스에 의해 지정된 요소의 주소를 계산할 때 이 주소를 기준으로 사용한다.

이 함수는 두 개의 3×3 부동소수 행렬을 함께 곱한다.

 공허하게 하다 mult3x3f(둥둥 뜨다 결과[][3], 경시하다 둥둥 뜨다 A[][3], 경시하다 둥둥 뜨다 B[][3])  {    인트로 i, j, k;    을 위해 (i = 0; i < 3; ++i) {      을 위해 (j = 0; j < 3; ++j) {        결과[i][j] = 0;        을 위해 (k = 0; k < 3; ++k)          결과[i][j] += A[i][k] * B[k][j];      }    }  } 

다른 언어의 경우

Pascal과 같은 다른 프로그래밍 언어에서 인덱스는 1에서 시작될 수 있으므로 메모리 블록에서의 인덱싱은 단순한 선형 변환에 의해 시작-at-1 어드레싱 체계에 맞도록 변경될 수 있다 - 이 체계에서 기본 주소 b와 요소 크기 s를 가진 ith 요소의 메모리 위치는 b + (i - 1)s이다.

참조

  1. ^ 텐서 분석 소개: 엔지니어 및 응용 과학자들을 위해, J.R. Tyldesley, Longman, 1975, ISBN0-582-44355-5
  2. ^ C++, J로 프로그래밍. 허바드, Schaum's Outline, McGraw Hill (미국), 1996, ISBN 0-07-114328-9
  • C++, J로 프로그래밍. 허바드, Schaum's Outline, McGraw Hill (미국), 1996, ISBN 0-07-114328-9
  • 텐서 미적분학, D.C. 케이, Schaum의 윤곽, McGraw Hill (미국), 1988, ISBN 0-07-033484-6
  • 물리공학 수학적 방법 K.F. 라일리, M.P. 홉슨, S.J. 빈스, 캠브리지 대학 출판부, 2010, ISBN 978-0-521-86153-3