다차원 배열을 효과적으로 처리하도록 도와주는 도구.
Python의 기본 List보다 빠르고 강력한 기능을 제공한다.
pip install numpy
📍 잘 사용하지 않을 것 같은 파라미터는 생략했음
arr = np.arange(4)
print(arr)
>> [0 1 2 3]
범위만큼의 배열을 생성한다.
arange([start,] stop, [step,] dtype=None)
start, step을 주지 않으면 0부터 1씩 증가하는 배열을 생성한다.
start
: 값의 시작 범위
stop
: 값의 끝 범위
step
: 값의 간격
dtype
: 배열 값의 타입
arr = np.zeros((2,2))
print(arr)
>> [[0. 0.]
[0. 0.]]
0으로 채워진 배열을 생성한다.
arr = np.ones((2,2))
print(arr)
>> [[1. 1.]
[1. 1.]]
1로 채워진 배열을 생성한다.
arr = np.full((2,2), 7)
print(arr)
>> [[7 7]
[7 7]]
지정한 값으로 채워진 배열을 생성한다.
arr = np.eye(2)
print(arr)
>> [[1. 0.]
[0. 1.]]
단위 행렬을 생성한다.
💡 단위 행렬
주대각선의 원소가 모두 1이며 나머지 원소는 모두 0인 정사각 행렬
arr = np.random.rand(10)
print(arr)
>> [0.58175577 0.48856864 0.25551639 0.78987922 0.28643834 0.40069823
0.74301636 0.56452048 0.75722793 0.57143153]
(0,1]의 범위에서 랜덤한 수로 이루어진 n차원 배열을 생성해준다.
💡 나중에 random.rand와 random.random의 차이 찾아보기
arr = np.random.randint(1,10,5)
print(arr)
>> [3 1 2 5 1]
randint(low, high=None, size=None, dtype=int)
(low,high]의 범위에서 랜덤한 수로 이루어진 n차원 배열을 생성해준다.
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
arr3 = np.concatenate([arr1, arr2])
print(arr3)
>> [1 2 3 4 5 6]
arr1 = np.arange(4).reshape(1,4)
arr2 = np.arange(8).reshape(2,4)
arr3 = np.concatenate([arr1,arr2],axis = 0)
print(arr3)
>> [[0 1 2 3]
[0 1 2 3]
[4 5 6 7]]
배열을 더해준다.
axis의 값에 따라 더하는 축이 달라진다.
차원/axis | 0 | 1 | 2 |
---|---|---|---|
1 | * | ||
2 | 행 | 열 | |
3 | 면 | 행 | 열 |
💡 1차원 배열은 축이 1개라 행, 열의 구분이 없음
arr1 = np.array([1,2,3,4])
arr2 = arr1.reshape(2,2)
print(arr2)
>> [[1 2]
[3 4]]
배열의 형태를 바꿔준다.
arr = np.arange(8).reshape(2,4)
left, right = np.split(arr, [2], axis = 1)
print(left)
print(right)
>> [[0 1]
[4 5]]
>> [[2 3]
[6 7]]
배열을 나눠준다.
arr1 = np.arange(8).reshape(2,4)
arr2 = arr1[:2,1:3]
print(arr2)
>> [[1 2]
[5 6]]
슬라이싱 방법은 기존 파이썬과 같다.
arr2[0,0] = 99
print(arr1)
>> [[ 0 99 2 3]
[ 4 5 6 7]]
arr2의 값을 바꿨는데 arr1도 변해있다.
arr2는 arr1과 다른 배열이 아니라, arr1의 뷰일 뿐이기 때문이다.
슬라이싱을 통해 생성된 배열은, 새로운 배열이 아니라 기존 배열의 뷰!
arr = np.random.randint(1, 100, size = 10)
print(arr)
# arr에서 짝수만 마스크
even_mask = arr%2 == 0
print(even_mask)
print(arr[even_mask])
>> [60 72 44 67 76 97 39 99 97 6]
>> [ True True True False True False False False False True]
>> [60 72 44 76 6]
이렇게 원하는 조건으로 배열을 추출할 수 있다.
정수 인덱싱은 뷰를 만드는 것이 아니라, Copy를 만드는 것!
... 뭐지? 나중에 다시 공부