NumPy 배열을 생성하는 가장 기본적인 함수는 array() 입니다. 첫 번째 인자로 리스트를 받는데 이것으로 array객체를 생성합니다.
>>> np.array( [1, 2, 3] ) #1차 배열 (벡터) 생성
>>> np.array( [ [1, 2, 3], [4, 5, 6] ) # 2x3 크기의 2차원 배열 (행렬) 생성
파이썬의 내장 함수인 range()와 유사하게 배열 객체를 반환해주는 arange() 함수가 있습니다.
np.arange(10) 라고 한다면 1차원 배얼 [0,1,2, ... ,9]를 생성하는 것입니다.
그리고 시작점과 끝점을 균일 간격으로 나눈 점들을 생성해주는 linspace()함수도 있습니다.
c = np.linspace(0, 1, 6) # start, end, num-points
d = np.linspace(0, 1, 5, endpoint=False)
c= [0. 0.2 0.4 0.6 0.8 1. ]
d= [0. 0.2 0.4 0.6 0.8]
위의 코드에서 c는 시작점이 0 이고 끝점이 1이므로 이를 6 점으로 표시하려면 0.2 간격씩 띄우면 됩니다. d는 시작점이 0 이고 끝점이 1인데 5등분으로 나누는데 끝점을 포함하지 않으니 0.2 간격으로 나뉘어 집니다.
배열의 산술 연산자는 새 배열이 만들어지고 그 결과로 채워집니다. 다음의 코드로 NumPy 연산을 설명해 보겠습니다
import numpy as np
a = np.array( [20,30,40,50] )
b = np.arange( 4 )
print("배열 a", a)
print("arrange로 생성한 b",b)
c = a-b
print("c=a-b 의 결과값",c)
print("b**2 의 결과값",b**2)
print("a의 sine값 * 10 의 결과값",10*np.sin(a))
print("a가 35보다 작은지에 대한 비교 결과",a<35)
AA = np.array( [[1,1],
[0,1]] )
BB = np.array( [[2,0],
[3,4]] )
print("AA * BB 의 결과값\n",AA * BB)
print("AA @ BB 의 결과값\n",AA @ BB)
print("AA.dot(BB) 의 결과값\n",AA.dot(BB))
위 코드의 실행 결과는 다음과 같습니다.
배열 a [20 30 40 50]
arrange로 생성한 b [0 1 2 3]
c=a-b 의 결과값 [20 29 38 47]
b**2 의 결과값 [0 1 4 9]
a의 sine값 * 10 의 결과값 [ 9.12945251 -9.88031624 7.4511316 -2.62374854]
a가 35보다 작은지에 대한 비교 결과 [ True True False False]
AA * BB 의 결과값
[[2 0]
[0 4]]
AA @ BB 의 결과값
[[5 4]
[3 4]]
AA.dot(BB) 의 결과값
[[5 4]
[3 4]]
a = np.array( [20,30,40,50] ) 1차원 배열로 NumPy 배열을 생성하여 그 이름을 a로 칭합니다.
numpy.arange([start,] stop[, step,], dtype=None) 함수는 start부터 stop 미만까지 step 간격으로 데이터 생성한 후 배열을 만드는 함수입니다. 따라서 b=np.arrange(4) 는 자동으로 [0 1 2 3] 라는 1차원 배열로 데이터가 존재하는 NumPy 배열을 생성합니다.
c=a-b , b**2 등 연산의 결과는 각각의 배열 값에 해당 연산을 한 것으로 계산하여 출력됩니다. *는 행렬곱이 아니라 요소별 곱셈입니다.
벡터의 내적이나 매트릭스의 벡터 곱이나, 메트릭스 곱을 계산하기 위해 @ 혹은 dot 함수를 사용합니다. matrix multiplication에 대해서는 별도로 학습하기 바랍니다.
AA.dot(BB) 메트릭스 곱은 AA[0,0]*BB[0,0]+AA[0,1]*BB[1,0]=5, AA[0,0]*BB[0,1]+AA[0,1]*BB[1,1]=4, AA[1,0]*BB[0,1]+AA[1,1]*BB[1,1]=3, AA[1,0]*BB[0,1]+AA[1,1]*BB[1,1]=4 가 나옵니다.