“4 차원”은 배열과 어떻게 작동합니까?


30

추상:

따라서 이해하기는 매우 어렵지만 (일반적으로) 물리적으로 작업하는 3 가지 차원이 있습니다.

첫 번째는 선으로 표시됩니다.
두 번째는 사각형으로 표시됩니다.
세 번째는 큐브로 표시됩니다.

우리가 4 위에 도달 할 때까지 충분히 간단합니다. 무슨 뜻인지 알면 3D 공간에 그리는 것이 다소 어렵습니다. 어떤 사람들은 시간과 관련 이 있다고 말합니다 .

질문:

이제는 그다지 의미가 없지만 나에게 큰 영향을 미칩니다. 내 질문은 이것에 관한 것이 아니거나 MathSO 또는 PhysicsSO에 대해 묻고 싶습니다. 내 질문은 : 컴퓨터가 배열을 어떻게 처리합니까?

다양한 프로그래밍 언어로 4D, 5D, 6D 등의 배열을 만들 수 있다는 것을 알고 있지만 그 작동 방식을 알고 싶습니다.


66
3 차원을 큐브로 시각화 할 수 있으면 4 차원을 한 줄에 여러 개의 큐브로 시각화 할 수 있습니다. 5 차원은 그리드의 각 셀에 큐브가 들어있는 그리드로 시각화 할 수 있습니다! 등등 ...은 "4 차원은"(어떤 시간과는 아무 상관이 없습니다 당신이 당신의 프로그램의 의미의 맥락에서 같은 그것을 정의하지 않는 한,이다).
FrustratedWithFormsDesigner

14
일반적으로 차원을 엄격하게 물리적 구조로 생각하지 않도록함으로써이 개념적인 혹을 극복 할 수 있습니다. 예를 들어, 일부 기계 학습 문제는 수십만 개의 차원을 가질 수 있으며, 각 차원은 데이터 집합의 기능입니다.
Steven Evers


6
Steve Evers의 의견에 더하여, 일반적인 데이터 유형 인 RGB 색상을 생각하십시오. 여기에는 3 차원이 있으므로 RGB "색 공간"을 고려할 수 있습니다. 이제 알파 구성 요소를 추가하십시오. 네 차원이 있습니다.
Josh Caswell

25
컴퓨터는 기하학적 치수의 아이디어에 신경 쓰지 않으며 인간 편의를위한 장치 일뿐입니다. 5x5x5x5 배열을 할당하면 컴퓨터는 625 요소의 배열을 할당하고 그에 따라 인덱스로 수학을 수행합니다.
David Zhang

답변:


77

다행히도 프로그램은 실제 세계의 물리적 제약에 의해 제한되지 않습니다. 배열은 물리적 공간에 저장되지 않으므로 배열의 차원 수는 중요하지 않습니다. 그것들은 선형 메모리로 평평해진다. 예를 들어, 두 개의 요소가있는 1 차원 배열은 다음과 같이 배치 될 수 있습니다.

(0) (1)

그러면 2x2 차원 배열은 다음과 같습니다.

(0,0) (0,1) (1,0) (1,1)

3 차원 2x2x2 배열은 다음과 같습니다.

(0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1)

이것이 어디로 가고 있는지 잘 알 수 있습니다. 네 가지 차원은 다음과 같습니다.

(0,0,0,0) (0,0,0,1) (0,0,1,0) (0,0,1,1) (0,1,0,0) (0,1,0,1) (0,1,1,0) (0,1,1,1)
(1,0,0,0) (1,0,0,1) (1,0,1,0) (1,0,1,1) (1,1,0,0) (1,1,0,1) (1,1,1,0) (1,1,1,1)

10
컴퓨터 배열은 인간의 이해 또는 시각화에 의해 제한되지 않지만 물리적 제약에 의해 제한됩니다. 예를 들어 길이 n의 각 d 차원의 배열은 n ^ d를 취하거나보다 일반적으로 길이가 다른 n1 × n2 ×… × nd.
acelent

6
@ColtonAllen : 당신이 무엇을 말하는지 잘 모르겠습니다. 차원정의 는 "거의 말하면, 개체의 점을 지정하는 데 필요한 좌표의 수"입니다. C로 선언 된 배열은 int a[2][2][2];3 차원 배열입니다.
Greg Hewgill

4
"다행히도 프로그램은 실제 세계의 물리적 제약에 의해 제한되지 않습니다." 따라서 4.5THz에 프로세서가 있고 메모리 계층에 신경 쓰지 않는 모든 사람이 그렇지 않습니까? 이것은 내가
읽은

24
@ Manu343726 그는 (이론적으로) 제한된 크기의 공간과 시간에 살고 있지만 컴퓨터 메모리의 배열은 "가장자리를 잡은"크기를 가지고 있다는 사실을 언급하고있다. 모두 메모리에 선형으로 인접한 공간에 저장되어 있기 때문에 우리가 사는 차원의 수. 트롤하지 마십시오> :(
Blackhawk

15
@ Manu343726 : 나는 컴퓨터가 아니라 프로그램을 신중하게 말했다 . 이것이 소프트웨어의 가장 큰 장점 중 하나입니다.
Greg Hewgill

49

높은 공간적 차원에서 상상할 필요는 없으며 고사리 잎으로 생각하면됩니다. 고사리 잎

주요 줄기는 첫 번째 배열이며 각 분기는 저장하는 항목입니다. 지점을 보면 이것이 두 번째 차원입니다. 데이터를 나타내는 작은 가지의 구조가 비슷합니다. 이들은 차례로 가장 작은 내부 또는 가장 높은 차원 배열의 데이터를 나타내는 작은 잎에 도달 할 때까지 계속되는 작은 가지를 가지고 있습니다.

각 레벨을 고유 한 이름으로 선언하면이 건물을 볼 수 있습니다. 여기에서는 코드를 최소화하기 위해 각 레벨 변수를 재사용하고 있습니다.

leaf = 2;
tinyBranch = [leaf, leaf, leaf];
middleBranch = [tinyBranch, tinyBranch, tinyBranch];
bigBranch = [middleBranch, middleBranch, middleBranch];
mainBranch = [bigBranch, bigBranch, bigBranch];

1
이 시각화가 들쭉날쭉 한 배열을 더 가깝게 나타내지 않습니까?
Matt Johnson-Pint

2
@MattJohnson 공식적으로 그렇습니다. 그러나이 예제는 다차원 배열을 설명 / 시각화합니다.
M.Mimpen

4
+1 이것은 깔끔한 시각 화일뿐만 아니라 많은 배열 구현에 대한 선형 설명보다 진실에 더 가깝습니다. 여기서 대부분의 사람들이 "어레이"라는 용어를 연속 메모리로 제한할지 여부에 관계없이 "다차원 배열 "은 많은 언어에 대한 문헌에서 그러한 배열에 사용되는 용어 일 것입니다.
DeveloperInDevelopment

46

차원은 당신이 원하는 것이 무엇이든, 4 차원은 반드시 시간 일 필요는 없습니다. 3 차원을 큐브로 생각하면 4 차원을 큐브 행으로 생각할 수 있습니다. 5 차원, 입방체 격자 등.

3 차원 복셀 모음을 가질 수도 있습니다. 4 차원은 색상, 밀도 또는 기타 속성입니다.

다차원 배열에 메모리를 할당하면 데이터 유형에 대해 각 차원의 최대 값 만 할당하면됩니다. 각 차원에 3 차원 배열 또는 10 개의 요소로 구성된 '큐브'가있는 경우 1,000 개의 요소가 할당됩니다. 4 차원에 10 개의 요소가있는 4d 배열을 만들면 컴퓨터는 10,000을 할당합니다. 최대 5 차원으로 범프하면 100,000이 할당됩니다.

컴퓨터는 각 차원이 나타내는 것에 대해 어떤 종류의 의미도 신경 쓰지 않습니다. 요소 목록에서 단일 지점의 위치를 ​​선택하려면 메모리 주소를 선택하면됩니다.


26

환자의 팔에 장착 된 일련의 센서 인 새로운 의료 기기에 대한 R & D를 수행한다고 상상해보십시오. 테스트를 위해 7 명의 자원 봉사자가 준비되어 있습니다. 각 센서는 약 1 분 동안 100ms마다 한 번씩 저주파, 중주파 및 고주파수 판독 값을보고합니다.

분석 및 플로팅을 위해 모든 데이터를 메모리에 저장하는 방법은 무엇입니까?

분명히 배열입니다. 다음과 같이 구성됩니다 (구성된 일반 의사 코드 사용).

npatients = 7
nsensors = 4     // number of sensors on an arm
nchannels = 3
nsamples = 60.0 / 0.1
sensordata = Array[ npatients, nsensors, 2, nchannels, nsamples ]

그것은 5 차원 배열이며, 까다 롭고, 신비스럽고 당황스럽지 않습니다. 이를 5 차원 유클리드 공간과 연관시킬 이유가 없습니다. 하나의 데이터 값을 얻으려면 다음과 같은 표현식을 사용하십시오.

x = sensordata[6, 5, 1, 2, 338)

환자 ID, 센서 ID 등을 보유한 5 개의 열과 값이있는 열이있는 각 데이터 값에 대한 레코드가있는 관계형 데이터베이스를 쿼리하는 것과 같습니다. 하나의 데이터 포인트를 얻으려면 WHERE에서 5 개의 용어를 사용하십시오. 센서 데이터에서 값 선택 (환자 = 6) 및 (sensorid = 5) 및 (arm = "left") 및 (channel = "midfreq") 및 (sampleindex = 338 ).

열이 5 개 이상인 데이터베이스 테이블에 대한 신비로운 것은 없습니다.

(실제로 1 기반 인덱싱을 사용하고 있지만 0 기반이 훨씬 일반적입니다.)

나는 팔의 수를 하드 코딩하여 나쁜 소년입니다. 문어에서 이러한 센서를 조사 할 자금을 제공 받았다면 문제가 있습니다!


3
+1 차원은 필요한 모든 데이터가 될 수 있음을 보여주는 훌륭한 예입니다.
Mike는 Monica를 지원합니다.

20

배열은 연속 메모리 블록 일뿐입니다. 메모리 어드레싱은 1 차원이며, 앞뒤로 이동할 수 있습니다. 따라서 5 개의 요소가있는 배열이 있다고 가정하면 5 개의 메모리 블록이 예약됩니다. 각 차원에 5 개의 요소가있는 2 차원 배열이있는 경우 25 개의 메모리 블록이 예약됩니다.


5
예, 배열에 차원을 더 추가 할 때이 점을 명심하십시오. 메모리 사용량이 사소하지 않을 수 있습니다.
davidhaskins

18

... 또는 MathSO에 요청할 것입니다 ...

사실, 수학자들은 결코 4 차원과 시간 같은 것을 연관시키지 않을 것입니다. 수학자들은 단순히 차원을 일반적으로 벡터 공간 의 추상 속성으로 정의하기도 합니다 (종종 매니 폴드 또는 미터법 공간 으로 일반화되기도 함 ). 그리고이 추상적 인 정의는 우리가 움직일 물리적 공간의 크기가 중요하지 않습니다. 치수의 개념은 물리적 공간과 유사하지 않은 공간에 적용됩니다. 사실 수학자 (실제로는 물리학 자)는 종종 무한 차원을 사용 합니다 양자 역학의 힐버트 공간과 같은 공간.

이를 통해 배열을 이야기 해 봅시다. 추상 정의가 실제로 훨씬 단순하기 때문에 벡터 공간을 이해할 필요가 없습니다.

( 0 × 1 × 2 × ... × n -1 ) 크기 배열 (즉, 차원 n )은 단순히 01 ⋅ ... ⋅ n -1 숫자 의 모음입니다 ( 또는 어떤 유형의 객체라도 배열을 채 웁니다. 해당 길이의 1 차원 배열과의 유일한 차이점은 차원을 따로 따로 인덱싱하는 유용한 방법이 있다는 것입니다.

i lin = i n -1 + n -1 ⋅ ( i n −2 + n -1 ⋅ (... 2 ⋅ ( i 1 + 1i 0 ) ...)


명확히하기 위해, 3 차원을 설명하기 위해 3 개의 요소가있는 배열 만 필요하고 N 요소 배열은 N 차원을 설명합니다. 그러나 모든 벡터를 자세히 설명 하는 것은 다른 이야기입니다. 종종 ( imshow파이썬에서) 이미지를 보여줌으로써 이루어집니다. 두 번째 공간 차원과 세 번째 색 차원을 보여줄 수 있습니다.
Scott

@Scott : "배열의 차원"이라는 개념은 불행한 것에 동의합니다. 왜냐하면 그것은 배열로 나타낼 수있는 벡터를 가진 공간의 차원과 관련이 없기 때문입니다. (그러나 처음에는 평범한 추상 배열로 벡터를 나타내는 것이 좋은 생각이 아니라고 생각합니다.) 더 좋은 이름은 텐서 와 유사하게 배열 의 순위 일 수 있습니다 .
leftaroundabout

13

프로그래밍에서 배열은 구현하기가 쉽지만 이해하지 못할 수도 있습니다.

일반적으로 각 수준의 배열은 내용을 갖는 것을 의미합니다 n. 그 의미는

  • int x[4]4 개의 블록으로 구성되며 각 블록에는 int.
  • int x[5][4]5 개의 블록으로 구성되며 각 블록에는 int[4].
  • int x[3][5][4]3 개의 블록으로 구성되며 각 블록에는 int[5][4].
  • int x[2][3][5][4]2 개의 블록으로 구성되며 각 블록에는 int[3][5][4].

당신이 그들을 언급하는 방법은 당신에게 달려 있지만 더 나은 이해를 위해서는 다음과 같은 것이 있습니다.

  • COLUMN 마지막으로
  • ROW 마지막으로
  • PAGE 마지막 세번째

여기까지, 나는 어딘가에 그것을 읽었다. 여기에 머 무르려면 다음을 정의 할 수도 있습니다.

  • BOOK 마지막 네 번째
  • 아마 SHELF다섯 번째 마지막 것. 또는 원하는 경우 SHELFROW계속할 수 있습니다.

즉, "야생 생활"에서 4 개 또는 5 개 이상의 차원을 가진 배열을 본 적이 없습니다.

이러한 방법으로, int x[6][2][3][5][4]각각 2 권의 책이 있고 각각 3 페이지, 3 행, 5 행, 4 열로 구성된 6 개의 "선반"모음으로 정의하고 상상할 수 있습니다.


13

서랍장과 같은 1 차원 배열을 생각해보십시오.

서랍장

각 드로어는 배열의 인덱스입니다. 각 서랍에 원하는 것을 넣을 수 있으며 여러 가지 목적으로 각 서랍에는 단일 항목 (1 차원 배열) 만 포함됩니다.

이 서랍장은 마술이지만 물리적 공간에 의해 제한되지 않습니다. 즉 , 첫 번째 서랍장의 각 서랍 안에 다른 서랍장을 넣을 수 있습니다 . 서랍의 내부 상자에는 원하는 것을 담을 수 있습니다. 그것은 2 차원 배열입니다.

따라서 "첫 번째 서랍장의 상단 서랍을 열고 서랍에서 서랍장을 꺼내고 두 번째 서랍장의 하단 서랍을 엽니 다"와 같은 것을 말할 수 있습니다. 이는 2D 배열의 인덱스에 액세스하는 것과 같습니다. myArray [0] [3];

물론 가장 바깥 쪽 서랍 안에있는 서랍장에는 서랍장이 들어있을 수 있습니다. 그것은 3 차원 배열입니다.

따라서 귀하의 질문은 4 차원 배열이 무엇입니까? 물론 서랍장 서랍장 서랍장입니다. 서랍장 서랍장입니다!

서랍이 끝까지 내려옵니다.


4
서랍장 끝이야
Thomas Eding

8
그리고 마지막 서랍에서? 거북 .
Kevin Workman

약간 pedantic하고있는 것. 각 가슴에 4 개가 아닌 3 개의 서랍이 있고 (그림을 기준으로) 기본 0 인덱스를 사용하는 경우 하단 서랍은 3이 아니라 3 myArray[0][3]myArray[0][2]됩니다. 그러나 그렇지 않으면 좋은 설명입니다.
Tom Heard

@TomHeard 첫 번째 서랍장에는 3 개의 서랍이 있지만 첫 번째 서랍 안에있는 서랍장에는 4 개의 서랍이 있습니다. 어이! : p
Kevin Workman

1
아, 그럼 괜찮아 = D
Tom Heard

5

이 질문의 대부분은 이미 고려되었지만 차원의 특성을 고려하면 도움이 될 것입니다. 모든 차원이 공간적인 것은 아닙니다. 치수는 측정의 맥락입니다. 여기 몇 가지 예가 있어요.

  • 주파수-색상 또는 피치
  • 질량
  • 원자가
  • 색상 (업 쿼크, 다운 쿼크, 이상한 쿼크, 참드 쿼크 등)
  • 회전 방향
  • 각도
  • 음량
  • 고춧가루

3 차원의 공간 차원이 있기 때문에 "4 번째"차원은 4 번째입니다. 공간과 시간이 크게 나타납니다. 당신의 얼굴을 아주 많이. 그러나 측정 가능하고 측정 가능한 모든 품질은 측정 할 수있는 차원이 될 수 있습니다.

예를 들어, 브래지어는 컵 크기, 가슴 크기 및 전면 광고의 세 가지 차원을 가지고 있습니다.


1
"모든 차원이 공간적이지는 않습니다." 배열의 경우 모든 차원 공간적입니다.
Rhymoid

2
@Rhymoid : 배열의 경우 공간에 대해 생각하는 방식에 본질적으로 공간적인 치수는 없습니다 . : P 우리는 그것들이 우리가 원하는 것을 표현하도록 정의합니다.
cHao

@cHao 아마도 그들이 저장 한 데이터의 의미를 보면. 그러나 표현 / 구문 / 구현 측면에서 모든 배열 차원은 본질적으로 공간적입니다. 실제로 배열을 알고리즘의 일부로 사용할 때 의존하는 것입니다.
Rhymoid

@Rhymoid :이 질문이 처음에 요청 된 것과 동일한 사고 과정입니다. 열거 가능한 차원은 공간적으로 만들지 않습니다. 구현 적으로 공간이 없습니다. 메모리 만 있고, 프로그램이 알고 / 보거나 돌보는 한 메모리는 일차원 적입니다.
cHao

@cHao : 구현 측면에는 시간도 있기 때문에 공간이 있습니다. '스페이스 누수'(하스켈 커뮤니티에서 발견 된 '메모리 누수'에 대한 대안)라는 용어는 우연의 일치가 아닙니다. 기억이 일차원으로 묘사된다는 사실은 BCPL의 유산입니다.
Rhymoid

4

물리학에서 우리는 각 공간 차원이 무한하다고 가정하여 새로운 차원의 공간을 찾는 것이 매우 어렵습니다.

유한 배열을 다룰 때 공간을 쉽게 찾을 수 있습니다.

격자가 인쇄 된 용지를 상상해보십시오. 그리드의 각 셀에 정보를 쓸 수 있습니다. 그것은 행과 열의 2D 배열입니다.

이러한 용지 몇 장을 파일 폴더에 넣습니다. 페이지, 행 및 열의 3D 배열입니다.

해당 폴더 중 몇 개를 파일 상자에 넣습니다. 4D 배열 : 폴더, 페이지, 행, 열.

나무 팔레트에 사각형 격자로 상자를 정렬하십시오. 6D 배열 : 상자 행, 상자 열, 폴더, 페이지, 행, 열.

그 위에 더 많은 격자 상자를 쌓으십시오. 7D 배열 : 상자 깊이, 상자 행, 상자 열, 폴더, 페이지, 행, 열.

팔레트를 운반 컨테이너에 넣습니다 (9D 어레이). (각 스택이 컨테이너 내부만큼 키가 크다고 가정하면 여기에서 2 차원 만 더 얻을 수 있습니다.)

컨테이너 선박의 갑판에 선적 컨테이너를 쌓아 올리십시오 : 12D 어레이.

컨테이너 선박은 이제 13D 배열입니다.


"우리는 각 공간 차원이 무한대라고 가정한다"무한대는 실제로 여기서 가장 큰 문제는 아니며, 연속 은 "실제"문제이다 (즉, 셀 수없이 무한하며, 우리는 물리적으로 의미있는 동종 모형 매핑이 필요하다).
leftaroundabout

3

직교 좌표계에서는 평면에 x 및 y 축이 있습니다. 평면에서 숫자를 (x, y)로 나타낼 수 있습니다.

3 "공간"(또는 큐브라고도 함)에서 x, y 및 z 축을 가질 수 있습니다. 큐브의 모든 요소를 ​​(x, y, z)로 나타낼 수 있습니다.

다변량 공간에서 x, y, z 및 w 축을 가질 수 있습니다 (여기서 w 축은 "가상"). 해당 공간의 모든 요소를 ​​(x, y, z, w)로 나타낼 수 있습니다.

공간에서 이러한 모든 점은 벡터로 표시됩니다. 네 공간에는 v1 = (x1, y1, z1, w1) 및 v2 = (x2, y2, z2, w2)의 두 벡터가있을 수 있습니다 . 그런 다음 숫자처럼이 벡터를 조작합니다. 예를 들어, 두 벡터 v1 + v2 의 합은 (x1, y1, z1, w1) + (x2, y2, z2, w2)가됩니다. 그런 다음 숫자처럼 용어별로 벡터를 추가하여 (x1 + x2, y1 + y2, z1 + z2, w1 + w2)를 얻습니다.

프로그램은 적절한 배열을 사용하여 벡터를 정의한 다음 적절한 순서로 벡터에 대한 산술 연산을 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.