AI 수학

Numpy

자동매매 2026. 2. 1. 10:36

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]

 

 

내적/외적/norm

 
1. numpy.dot (내적, Dot Product) 
  • 의미: 두 벡터의 대응하는 성분끼리 곱한 후 모두 더한 값(스칼라)을 반환합니다.

  • 기하학적 의미: 두 벡터가 얼마나 같은 방향을 가리키는지를 나타냅니다(코사인 유사도와 관련).

  • 사용: np.dot(a, b)
  • 특징:
    • 1D 배열(벡터): 스칼라 값 반환.
    • 2D 배열(행렬): 행렬 곱셈(Matrix Multiplication) 수행. 
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 그래픽, 물리)에 사용됩니다. 
 
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)
 
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)할 때 필수적으로 사용됩니다. 

 

 

행렬의 전치

import numpy as np

a = np.array([[0, 1, 2],
             [1, 2, 3]])  # 2×3의 행렬
b = np.array([[0, 1, 2],
             [1, 2, 3]])  # 2×3의 행렬 이대로는 행렬곱을 할 수 없다

# print(np.dot(a, b))  # 전치하지 않고 행렬곱을 취하면 에러
print(np.dot(a, b.T))  # 전치에 의해 행렬곱이 가능으로​

 

 

단위 행렬(E, I)

import numpy as np

print(np.eye(2))  # 2×2의 단위 행렬
print()
print(np.eye(3))  # 3×3의 단위 행렬
print()
print(np.eye(4))  # 4×4의 단위 행렬
[[1. 0.]
 [0. 1.]]

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

 

 

 역행렬

import numpy as np

a = np.array([[1, 2],
              [3, 4]])
print(np.linalg.det(a))  # 행렬식이 0이 되지 않는 경우 
print(np.linalg.inv(a))  # 역행렬
-2.0000000000000004
[[-2.   1. ]
 [ 1.5 -0.5]]
 

선형 변형

import numpy as np
import matplotlib.pyplot as plt

a = np.array([2, 3])  # 변환 전의 벡터

A = np.array([[2, -1],
                     [2, -2]])

b = np.dot(A, a)  # 선형변환

print("변환 전의 벡터(a):", a)
print("변환 후의 벡터(b):", b)
      
def arrow(start, size, color):
    plt.quiver(start[0], start[1], size[0], size[1], angles="xy", scale_units="xy", scale=1, color=color)

s = np.array([0, 0])  # 원점

arrow(s, a, color="black")
arrow(s, b, color="blue")

# 그래프 표시
plt.xlim([-3,3])  # x의 표시 범위
plt.ylim([-3,3])  # y의 표시 범위
plt.xlabel("x", size=14)
plt.ylabel("y", size=14)
plt.grid()
plt.gca().set_aspect("equal")  # 가로세로비를 같게
plt.show()
 

표준기저

NumPy에서 표준기저(Standard Basis) 주로 단위 행렬(Identity Matrix)을 생성하는 함수를 통해 구현할 수 있습니다.

 

고윳값 / 고유벡터