본문 바로가기
AI 수학

Numpy

by 자동매매 2026. 2. 1.

sum / prod함수

import numpy as np

b = np.array([6, 1, 5, 4, 3, 2])

print(np.sum(b))  # 총합
print(np.prod(b))  # 총곱

 

random모듈

1. 정수 난수 생성

0부터 6미만의 정수의 난수 생성

a=[np.random.randint(6) for i in np.arange(100)]
print(a)
[3, 1, 0, 5, 4, 4, 4, 0, 5, 1, 0, 3, 0, 3, 2, 3, 4, 0, 4, 2, 1, 4, 1, 0, 1, 5, 4, 3, 2, 5, 2, 3, 4, 0, 1, 4, 4, 1, 5, 5, 4, 5, 4, 3, 2, 2, 5, 2, 4, 4, 4, 1, 2, 4, 0, 1, 5, 1, 5, 2, 5, 5, 1, 2, 1, 0, 1, 3, 5, 4, 3, 3, 5, 0, 5, 5, 2, 3, 0, 3, 2, 0, 0, 1, 5, 3, 0, 2, 2, 5, 1, 3, 5, 0, 1, 5, 2, 4, 3, 0]

 

 

2. 0부터 1미만 소수의 난수 생성

import numpy as np

r_dec = np.random.rand()   # 0부터 1 사이의 소수를 랜덤으로 1개 반환
print(r_dec)
print()

a= np.random.rand(10)  # 0-1의 균일한 난수 10개 생성
print(a)
0.5597065995821088

[0.3198579  0.13625963 0.33074243 0.04914224 0.39410434 0.47833296
 0.14013471 0.44658292 0.57370728 0.39915299]

 

 

3. 정규분포를 따른 난수

x = np.random.randn(10)  # 정규분포를 따른 난수의 분포 / 10개 생성
print(x)
[ 0.10779021  0.86439309  0.6718812   0.14882203  0.66727447 -0.71514395
 -0.10984627 -2.35854795 -1.90439235  1.96721137]

 

 

 

 

NumPy에서
dot, cross, norm은 선형대수학 및 3차원 공간 계산의 핵심 함수들로, 각각 벡터의 내적, 외적, 크기(길이)를 계산합니다. 

1. numpy.dot (내적, Dot Product) 
  • 의미: 두 벡터의 대응하는 성분끼리 곱한 후 모두 더한 값(스칼라)을 반환합니다.
  • 기하학적 의미: 두 벡터가 얼마나 같은 방향을 가리키는지를 나타냅니다(코사인 유사도와 관련).
  • 사용: np.dot(a, b)
  • 특징:
    • 1D 배열(벡터): 스칼라 값 반환.
    • 2D 배열(행렬): 행렬 곱셈(Matrix Multiplication) 수행. 
python
import numpy as np
a = np.array([1, 2])
b = np.array([3, 4])
# 1*3 + 2*4 = 11
print(np.dot(a, b)) # 결과: 11
 
2. numpy.cross (외적, Cross Product) 
  • 의미: 두 3차원 벡터에 동시에 수직인 새로운 벡터를 반환합니다.
  • 기하학적 의미: 두 벡터가 이루는 평면에 수직인 방향을 구하며, 결과 벡터의 크기는 두 벡터로 이루어진 평행사변형의 면적과 같습니다.
  • 사용: np.cross(a, b)
  • 특징: 주로 3차원 공간 계산(3D 그래픽, 물리)에 사용됩니다. 
python
import numpy as np
a = np.array([1, 0, 0])
b = np.array([0, 1, 0])
# x축, y축 벡터의 외적은 z축 벡터
print(np.cross(a, b)) # 결과: [0 0 1]
 
3. numpy.linalg.norm (노름, Norm) 
  • 의미: 벡터의 크기(길이, Magnitude) 또는 벡터의 노름을 계산합니다.
  • 기하학적 의미: 원점에서 벡터가 가리키는 점까지의 유클리드 거리(2-norm)를 구합니다.
  • 사용: np.linalg.norm(a)
  • 특징: 기본적으로
    L2cap L sub 2
    𝐿2
    Norm(유클리드 거리)을 계산하지만, 옵션을 통해
    L1cap L sub 1
    𝐿1
    Norm 등으로 변경 가능합니다. 
python
import numpy as np
a = np.array([3, 4])
# sqrt(3^2 + 4^2) = 5.0
print(np.linalg.norm(a)) # 결과: 5.0
 

요약 및 비교 
함수 이름결과값기하학적 의미주요 활용
dot 내적 스칼라(Scalar) 두 벡터의 방향 유사도, 투영 코사인 유사도, 행렬 곱셈
cross 외적 벡터(Vector) 두 벡터에 수직인 벡터(면적) 3D 공간 방향, 회전, 물리
norm 크기/노름 스칼라(Scalar) 벡터의 길이(원점~좌표) 정규화, 거리 계산
이 세 함수는 데이터 과학, 머신러닝, 3D 컴퓨터 그래픽스 등에서 데이터 간의 거리를 재거나(norm), 데이터의 차원을 축소(dot), 수직 특징을 추출(cross)할 때 필수적으로 사용됩니다. 

 

 

 

 

 

NumPy의
numpy.dot 함수는 수학적인 내적(Dot Product)행렬 곱(Matrix Multiplication) 연산을 수행합니다. 입력 배열의 차원에 따라 수학적 정의가 달라집니다. 

1. 1차원 배열: 벡터의 내적 (Inner Product) 
두 입력이 모두 1차원 배열(벡터)일 때, np.dot은 대응하는 요소끼리 곱한 후 그 결과를 모두 더하는 내적(스칼라 값)을 수행합니다. 
  • 수학적 표현:
    a⋅b=∑i=1naibi=a1b1+a2b2+…+anbnbold a center dot bold b equals sum from i equals 1 to n of a sub i b sub i equals a sub 1 b sub 1 plus a sub 2 b sub 2 plus … plus a sub n b sub n
    𝐚⋅𝐛=𝑛𝑖=1𝑎𝑖𝑏𝑖=𝑎1𝑏1+𝑎2𝑏2+…+𝑎𝑛𝑏𝑛
  • NumPy 예시:
    python
    import numpy as np
    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])
    result = np.dot(a, b)  # 1*4 + 2*5 + 3*6 = 32
    
     
     

2. 2차원 배열: 행렬 곱 (Matrix Multiplication) 
두 입력이 모두 2차원 배열(행렬)일 때, np.dot은 일반적인 행렬 곱셈 연산을 수행합니다. 
  • 수학적 표현 (
    C=A×Bcap C equals cap A cross cap B
    𝐶=𝐴×𝐵
    ):
    행렬
    A(m×n)cap A open paren m cross n close paren
    𝐴(𝑚×𝑛)
    와 행렬
    B(n×p)cap B open paren n cross p close paren
    𝐵(𝑛×𝑝)
    의 곱은 결과 행렬
    C(m×p)cap C open paren m cross p close paren
    𝐶(𝑚×𝑝)
    를 생성합니다.
    Cij=∑k=1nAikBkjcap C sub i j end-sub equals sum from k equals 1 to n of cap A sub i k end-sub cap B sub k j end-sub
    𝐶𝑖𝑗=𝑛𝑘=1𝐴𝑖𝑘𝐵𝑘𝑗
  • NumPy 예시:
    python
    A = np.array([[1, 2], [3, 4]])
    B = np.array([[5, 6], [7, 8]])
    result = np.dot(A, B)
    # [[1*5 + 2*7, 1*6 + 2*8],
    #  [3*5 + 4*7, 3*6 + 4*8]]
    
     
     

3. 고차원 배열 (N-D Array) 
3차원 이상의 배열에서는 첫 번째 배열의 마지막 축(last axis)과 두 번째 배열의 뒤에서 두 번째 축(second-to-last axis)에 대해 내적을 수행합니다. 
  • 수학적 표현:
    dot(a,b)[i,j,k,m]=∑na[i,j,∶,n]⋅b[k,n,m]dot open paren a comma b close paren open bracket i comma j comma k comma m close bracket equals sum over n of a open bracket i comma j comma colon comma n close bracket center dot b open bracket k comma n comma m close bracket
    dot(𝑎,𝑏)[𝑖,𝑗,𝑘,𝑚]=𝑛𝑎[𝑖,𝑗,∶,𝑛]⋅𝑏[𝑘,𝑛,𝑚]
     

4. 특징 요약 
  • 벡터 내적: 결과는 스칼라 값입니다.
  • 행렬 곱: 결과는 2차원 행렬입니다.
  • 대체 연산자: np.dot(A, B)는 A @ B 또는 np.matmul(A, B)와 동일하게 동작합니다.
  • 주의: 3차원 이상에서는 np.dot과 np.matmul(@)의 동작 방식이 다를 수 있으므로 2차원 이하의 행렬 곱에서는 @를 사용하는 것이 권장됩니다. 

 

 

NumPy의
numpy.cross(a, b) 함수는 두 3차원 벡터(또는 3차원 벡터들의 배열)의 외적(Cross Product, 벡터곱)을 계산합니다. 수학적으로는 주어진 두 벡터
aa
𝑎
bb
𝑏
에 동시에 수직인 새로운 벡터
cc
𝑐
를 구하는 연산입니다. 
1. 수학적 정의 및 수식 
두 벡터
a⃗=(a1,a2,a3)modified a with right arrow above equals open paren a sub 1 comma a sub 2 comma a sub 3 close paren
𝑎⃗=(𝑎1,𝑎2,𝑎3)
b⃗=(b1,b2,b3)modified b with right arrow above equals open paren b sub 1 comma b sub 2 comma b sub 3 close paren
𝑏⃗=(𝑏1,𝑏2,𝑏3)
가 있을 때, 이들의 외적
a⃗×b⃗modified a with right arrow above cross modified b with right arrow above
𝑎⃗×𝑏⃗
는 다음과 같이 정의됩니다. 
a⃗×b⃗=|ijka1a2a3b1b2b3|modified a with right arrow above cross modified b with right arrow above equals the determinant of the 3 by 3 matrix; Row 1: bold i, bold j, bold k; Row 2: a sub 1, a sub 2, a sub 3; Row 3: b sub 1, b sub 2, b sub 3 end-determinant;
𝑎⃗×𝑏⃗=𝐢𝐣𝐤𝑎1𝑎2𝑎3𝑏1𝑏2𝑏3
=(a2b3−a3b2)i−(a1b3−a3b1)j+(a1b2−a2b1)kequals open paren a sub 2 b sub 3 minus a sub 3 b sub 2 close paren bold i minus open paren a sub 1 b sub 3 minus a sub 3 b sub 1 close paren bold j plus open paren a sub 1 b sub 2 minus a sub 2 b sub 1 close paren bold k
=(𝑎2𝑏3−𝑎3𝑏2)𝐢−(𝑎1𝑏3−𝑎3𝑏1)𝐣+(𝑎1𝑏2−𝑎2𝑏1)𝐤
이를 성분별로 표현하면 다음과 같습니다. 
c⃗=a⃗×b⃗=(a2b3−a3b2a3b1−a1b3a1b2−a2b1)modified c with right arrow above equals modified a with right arrow above cross modified b with right arrow above equals the 3 by 1 column matrix; Row 1: a sub 2 b sub 3 minus a sub 3 b sub 2, Row 2: a sub 3 b sub 1 minus a sub 1 b sub 3, Row 3: a sub 1 b sub 2 minus a sub 2 b sub 1 end-matrix;
𝑐⃗=𝑎⃗×𝑏⃗=𝑎2𝑏3−𝑎3𝑏2𝑎3𝑏1−𝑎1𝑏3𝑎1𝑏2−𝑎2𝑏1
2. NumPy 구현의 특징 (2D 및 3D) 
  • 3차원 벡터:
    a=[a1,a2,a3]a equals open bracket a sub 1 comma a sub 2 comma a sub 3 close bracket
    𝑎=[𝑎1,𝑎2,𝑎3]
    ,
    b=[b1,b2,b3]b equals open bracket b sub 1 comma b sub 2 comma b sub 3 close bracket
    𝑏=[𝑏1,𝑏2,𝑏3]
    일 때 위 공식대로 3요소 벡터를 반환합니다.
  • 2차원 벡터 (특별 케이스): 만약 입력이 2차원 (
    [a1,a2]open bracket a sub 1 comma a sub 2 close bracket
    [𝑎1,𝑎2]
    )이라면, NumPy는 이를
    zz
    𝑧
    성분이 0인 3차원 벡터 (
    [a1,a2,0]open bracket a sub 1 comma a sub 2 comma 0 close bracket
    [𝑎1,𝑎2,0]
    )로 간주하여 계산합니다.
  • 2D-2D 입력: 두 입력 벡터가 모두 2차원일 경우, 결과의
    zz
    𝑧
    성분(스칼라)만 반환하는 경우가 많습니다 (
    a1b2−a2b1a sub 1 b sub 2 minus a sub 2 b sub 1
    𝑎1𝑏2−𝑎2𝑏1
    ). 
3. 주요 성질 
  • 반교환 법칙:
    a⃗×b⃗=−(b⃗×a⃗)modified a with right arrow above cross modified b with right arrow above equals negative open paren modified b with right arrow above cross modified a with right arrow above close paren
    𝑎⃗×𝑏⃗=−(𝑏⃗×𝑎⃗)
    (순서를 바꾸면 부호가 반대가 됨).
  • 직교성: 결과 벡터
    c⃗modified c with right arrow above
    𝑐⃗
    a⃗modified a with right arrow above
    𝑎⃗
    b⃗modified b with right arrow above
    𝑏⃗
    와 모두 수직입니다 (
    c⃗⋅a⃗=0modified c with right arrow above center dot modified a with right arrow above equals 0
    𝑐⃗⋅𝑎⃗=0
    ,
    c⃗⋅b⃗=0modified c with right arrow above center dot modified b with right arrow above equals 0
    𝑐⃗⋅𝑏⃗=0
    ).
  • 크기: 결과 벡터의 크기
    ‖a⃗×b⃗‖the norm of modified a with right arrow above cross modified b with right arrow above end-norm
    ‖𝑎⃗×𝑏⃗‖
    는 두 벡터가 이루는 평행사변형의 넓이와 같습니다. 
4. 코드 예시 
python
import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 외적 계산: (2*6 - 3*5, 3*4 - 1*6, 1*5 - 2*4) = (-3, 6, -3)
cross_product = np.cross(a, b)
print(cross_product)  # 결과: [-3  6 -3]
 
5. 다차원 배열(배열의 배열) 처리 
axis 파라미터를 사용하여 특정 축을 따라 외적을 계산할 수 있으며, 기본값은 axis=-1(마지막 축)입니다. 

'AI 수학' 카테고리의 다른 글

LaTex  (0) 2026.02.01
matplotlib  (0) 2026.01.31

댓글