728x90
반응형
SMALL

Numpy

Numpy는 수학, 과학 계산용 패키지입니다. 자료구조를 제공하고 있으, 그 중 ndarray는 파이썬의 list보다 속도가 더 빠름과 적은 메모리를 사용한다는 특징이 있습니다.

ndarray

ndarray는 Numpy의 핵심 구조로, Numpy에서 사용되는 데이터 배열입니다. 파이썬의 list를 ndarray로 변환하는 방법은 아래와 같습니다.

python
import numpy as np

list1 = [1, 2, 3, 4]
list2 = [[1, 2, 3, 4], [5, 6, 7, 8]]

# 리스트를 ndarray로 변환
ndarr1 = np.array(list1)
ndarr2 = np.array(list2)

print(ndarr1)
# [1 2 3 4]

print(ndarr2)
'''
[[1, 2, 3, 4],
 [5, 6, 7, 8]]
'''

ndarray의 data type

ndarray는 list와 달리 1개 단일 데이터 타입만 허용합니다.

python
import numpy as np

# 데이터 타입이 int인 ndarray
ndarr1 = np.array([1, 2, 3, 4])
print(ndarr1.dtype) # int64

# 데이터 타입이 float인 ndarray
ndarr2 = np.array([1, 2, 3.14, 4])
print(ndarr1.dtype) # float64

# 데이터 타입이 string인 ndarray
ndarr3 = np.array(['1', '2', '3.14', 'True'])
print(ndarr3.dtype) # <U4

ndarray 슬라이싱

ndarray의 슬라이싱은 리스트의 슬라이싱과 비슷합니다.

python
import numpy as np

ndarr1 = np.array(['🍎','🍒','🍓','🍎','🥭'])

# 인덱싱
print(ndarr1[0]) # 🍎
print(ndarr1[4]) # 🥭
print(ndarr1[-1]) # 🥭
print(ndarr1[-2]) # 🍎

# 슬라이싱
print(ndarr1[0:3]) # ['🍎' '🍒' '🍓']
print(ndarr1[2:]) # ['🍓' '🍎' '🥭']
print(ndarr1[:3]) # ['🍎' '🍒' '🍓']

Fancy 인덱싱

슬라이싱 대신 여러 특정한 인덱스의 값을 동시에 얻을 수 있는 Fancy 인덱싱을 사용할 수 있습니다.

python
import numpy as np

ndarr1 = np.array([10, 15, 2, 8, 20, 90, 85, 44, 23, 32])
idx = [2, 5, 9]
ndarr1[idx] # [2, 90, 32]

Boolean 인덱싱

조건에 대한 필터링을 통해 Boolean 값을 이용한 색인을 사용할 수 있습니다.

python
import numpy as np

ndarr1 = np.array(['🍎','🍒','🍓','🍎','🥭'])

selValue = [True, False, True, True, False]
ndarr1[selValue] # ['🍎', '🍓', '🍎']

ndarr2d = np.array1,2,3,4],
                    [5,6,7,8],
                    [9,10,11,12]])

print(ndarr2d[ndarr2d > 7]) # [ 8  9 10 11 12]

arange

순차적인 값을 생성할 때 사용하는 arange 함수는 range 함수와 유사합니다.

python
import numpy as np

arr2 = np.arange(1, 11)

for i in arr2:
    print(i, end=" ") # 1 2 3 4 5 6 7 8 9 10```

### sort

`sort` 함수를 이용하면 ndarray를 정렬할 수 있습니다.

```python
import numpy as np

ndarr1 = np.array([1, 10, 5, 7, 2, 4, 3, 6, 8, 9])
np.sort(ndarr1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ndarr2d = np.array([[11,10,12,9],
                    [3,1,4,2],
                    [5,6,7,8]])

# 행 정렬
print(np.sort(nd2d, axis=0))
'''
[[ 3  1  4  2],
 [ 5  6  7  8],
 [11 10 12  9]]
'''

# 열 정렬
print(np(ndarr2d, axis=1))
'''
[[ 9 10 11 12],
 [ 1  2  3  4],
 [ 5  6  7  8]]
'''

# 열 정렬 내림차순
print(np.sort(ndarr2d, axis=1)[:,::-1])
'''
[[12 11 10  9],
 [ 4  3  2  1],
 [ 8  7  6  5]]
'''
``### 연산자를 이용한 계산

덧셈, 뺄셈, 곱셈, 나눗셈은 shape가 같아야 하며, 같은 position끼리 연산합니다.

```python
a = np.array([[1,2,3],
              [2,3,4],])

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

print(a+b) # [[4 6 8], [3 5 7]]
print(a-b) # [[-2 -2 -2], [ 1  1  1]]
print(a*b) # [[ 3  8 15], [ 2  6 ]]
print(a/b) # [[0.33333333 0.5        0.6       ], [2.         1.5        1.33333333]]

또한 내적(dot product)은 맞닿는 shape가 같아야 하며, 내적은 떨어져 있는 shape가 결과 행렬이 됩니다.

python
a = np.array([[1,2,3],
              [1,2,3],
              [2,3,4]])

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

print(np.dot(a,b))
'''
[[22 28]
 [22 28]
 [31 40]]
'''

 

728x90
반응형
LIST

+ Recent posts