Arrays, tensors, vectors
Simulizer에는 값을 한 묶음으로 다루는 자료형이 세 종류 있습니다. 셋 중 어느 것을 쓰는 게 좋은지는 무엇이 들어 있는가와 어떤 연산을 할 것인가에 달려 있습니다.
Arrays
길이가 정해진 한 줄짜리 값 묶음입니다. 인덱스 0, 1, 2, … 로
값을 하나씩 읽고 씁니다. 정수 배열과 실수 배열이 따로 있습니다.
- 언제 — 수열, 시계열, 표본 모음, 격자 한 줄.
- 연산 — 인덱싱(
arr[i]), 길이(len(arr)), 반복 안에서 채우기.
대부분의 시뮬 결과는 결국 실수 배열 하나로 정리되어 그래프로 출력됩니다.
Tensors
값의 다차원 묶음입니다. 2차원이면 행렬, 3차원이면 격자장이 됩니다. 같은 원소를 담고 있어도 배열보다 덩어리 연산에 강합니다.
- 언제 — 행렬, 2D/3D 격자, 머신러닝 데이터.
- 연산 — 행렬 곱, 역행렬, 전치, 행렬식, 고유값, 원소별 사칙연산, 스케일, 정규분포 채우기, perlin 노이즈 생성.
Simulizer는 텐서 연산을 가능하면 GPU에서 실행하며, 큰 격자일수록 그 차이가 크게 벌어집니다.
Vectors
길이가 2 또는 3인 짧은 묶음에 특화된 자료형입니다. 위치, 속도, 가속도, 힘 같은 벡터 양을 다룰 때 씁니다.
- 언제 — 2D/3D 공간의 점 또는 화살표.
- 연산 — 더하기, 빼기, 스칼라 곱, 길이, 정규화, 내적, 외적(3D),
성분 접근(
x,y,z).
배열이나 텐서로도 같은 일을 할 수 있지만, 짧은 벡터는 전용 자료형을 쓰면 표현이 간결하고 의도도 또렷하게 드러납니다.
How to choose
| 무엇을 다루는가 | 권장 |
|---|---|
| 시간에 따른 한 값의 변화 | 배열 |
| 1차원 격자 위의 장 (예: 막대 온도) | 배열 |
| 행렬, 2D 격자장 | 텐서 |
| 3D 공간의 한 점·속도·힘 | 벡터 |
| 입자 여러 개의 위치 묶음 | 텐서(N×3) 또는 벡터의 배열 |
Pitfalls
- 배열의 인덱스가 길이 밖으로 벗어나면 에러가 납니다. 반복문 끝
조건을
n-1이 아니라n으로 잘못 두는 것이 흔한 실수입니다. - 텐서의 모양(shape)이 연산에 맞지 않으면 실행되지 않습니다. 행렬 곱은
(m×k) × (k×n) = (m×n)의 형태인데,k가 맞지 않으면 에러가 납니다. - 벡터는 길이가 고정입니다.
vec3에 값 4개를 넣을 수는 없습니다.