In [ ]:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
In [ ]:
!pip install numpy
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (1.22.4)
numpy 불러오기¶
In [ ]:
import numpy as np
In [ ]:
ar = np.array([1,2,3,4,5,6,7,8,9])
In [ ]:
print(ar)
print(type(ar))
[1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'>
for문을 이용해 리스트에 데이터 추가¶
In [ ]:
data = [1,2,3,4,5,6,7,8,9]
result = []
for i in data:
result.append(i*2)
print(result)
[2, 4, 6, 8, 10, 12, 14, 16, 18]
numpy를 이용해 리스트에 데이터 추가¶
In [ ]:
data = [1,2,3,4,5,6,7,8,9]
#data를 배열로 만들어준다
data_np = np.array(data)
result = data_np*2
print(result)
[ 2 4 6 8 10 12 14 16 18]
형태가 똑같은 배열은 연산이 가능!!¶
In [ ]:
a=np.array([1,2,3])
b=np.array([10,20,30])
print('a*2+b =',a*2+b)
a*2+b = [12 24 36]
비교연산¶
In [ ]:
a = np.array([1,2,3])
print(a == 2)
[False True False]
다중 비교연산¶
In [ ]:
a = np.array([1,2,3])
b = np.array([10,20,30])
print((a==2) & (b>=10))
[False True False]
In [ ]:
a = np.array([[1,2,3],[4,5,6]])
print(a)
[[1 2 3] [4 5 6]]
In [ ]:
a.shape
Out[ ]:
(2, 3)
3차원 배열¶
In [ ]:
a = np.array([[[1,2,3,1],
[4,5,6,4],
[7,8,9,7]],
[[10,11,12,10],
[13,14,15,13],
[16,17,18,16]]])
print(a)
print('\n')
print('깊이', len(a))
print('행', len(a[0]))
print('열', len(a[0][0]))
[[[ 1 2 3 1] [ 4 5 6 4] [ 7 8 9 7]] [[10 11 12 10] [13 14 15 13] [16 17 18 16]]] 깊이 2 행 3 열 4
차원수 / 배열의 크기¶
In [ ]:
a = np.array([1,2,3])
print('차원',a.ndim)
print('배열크기',a.shape)
차원 1 배열크기 (3,)
In [ ]:
a = np.array([[1,2,3],
[4,5,6]])
print('차원',a.ndim)
print('배열크기',a.shape)
차원 2 배열크기 (2, 3)
In [ ]:
a = np.array([[[1,2,3,4],
[4,5,6,7],
[8,9,10,11]],
[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]])
print('차원',a.ndim)
print('배열크기',a.shape)
차원 3 배열크기 (2, 3, 4)
펜시 인덱싱(불리언 인덱식, 정수 위치 인덱싱)¶
In [ ]:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array([True, False, True, False, True, False, True, False, True])
result = a[b]
print(result)
[1 3 5 7 9]
In [ ]:
#불리언 인덱싱
a = np.array([1,2,3,4,5,6,7,8,9])
b= a%2==1
print(a[b])
[1 3 5 7 9]
정수 배열 인덱싱¶
In [ ]:
a = np.array([1,2,3,4,5,6,7,8,9])
b = np.array([0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3])
a[b]
Out[ ]:
array([1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4])
배열의 자료형¶
In [ ]:
a = np.array([1,2,3,4])
print(a.dtype)
int64
In [ ]:
a=np.array([1.0, 2.0, 3.0])
print(a.dtype)
float64
In [ ]:
a = np.array([1,2,3], dtype='f') #int형 float64로 바꾸기!!
print(a.dtype)
float32
In [ ]:
a = np.array([1,2,3]).astype(str)
print(a)
['1' '2' '3']
In [ ]:
a = np.array([0,1,-1,0])
b = np.array([1,0,0,0])
print(a/b)
[ 0. inf -inf nan]
<ipython-input-64-e0c700ae3112>:4: RuntimeWarning: divide by zero encountered in true_divide print(a/b) <ipython-input-64-e0c700ae3112>:4: RuntimeWarning: invalid value encountered in true_divide print(a/b)
단순한 배열 생성¶
In [ ]:
a = np.zeros(5)
print(a)
[0. 0. 0. 0. 0.]
In [ ]:
a = np.zeros((2,3), dtype='i')
print(a.dtype)
print(a)
int32 [[0 0 0] [0 0 0]]
In [ ]:
a = np.zeros((2,3), dtype='U4')
print(a)
print(a.dtype)
[['' '' ''] ['' '' '']] <U4
In [ ]:
a = np.ones((2,3,4), dtype='i')
print(a)
print(a.dtype)
[[[1 1 1 1] [1 1 1 1] [1 1 1 1]] [[1 1 1 1] [1 1 1 1] [1 1 1 1]]] int32
In [ ]:
a = np.array([1,2,3,4,5])
b = np.zeros_like(a, dtype='i')
print(b)
[0 0 0 0 0]
In [ ]:
a = np.array([1,2,3,4,5])
b = np.ones_like(a, dtype='i')
print(b)
[1 1 1 1 1]
범위를 갖는 배열¶
In [ ]:
a = np.arange(10)
print(a)
[0 1 2 3 4 5 6 7 8 9]
In [ ]:
a = np.arange(1,10,2)
print(a)
[1 3 5 7 9]
선형구간으로 동일한 범위 나누기¶
In [ ]:
a = np.linspace(0, 100, 5)
print(a)
[ 0. 25. 50. 75. 100.]
로그구간으로 동일한 범위 나누기¶
In [ ]:
a = np.logspace(0.1, 1, 10)
print(a)
[ 1.25892541 1.58489319 1.99526231 2.51188643 3.16227766 3.98107171 5.01187234 6.30957344 7.94328235 10. ]
In [ ]:
import numpy as np
import matplotlib.pyplot as plt
x_value = range(1, 11)
y_value = np.logspace(0.1, 1, 10)
plt.plot(x_value, y_value, marker='o', markersize=10)
plt.show()
행과 열을 뒤집어주기 : 전치 행렬¶
In [ ]:
a = np.array([[1,3,5],
[7,9,11]])
b = np.array([[2,4],
[6,8],
[10,12]])
print(a.transpose()+b)
[[ 3 11] [ 9 17] [15 23]]
배열의 크기 변형¶
In [ ]:
a = np.arange(1,10)
b = a.reshape(3,-1)
print(b)
[[1 2 3] [4 5 6] [7 8 9]]
In [ ]:
a = np.arange(1,17)
b = a.reshape(2,2,-1)
print(b)
[[[ 1 2 3 4] [ 5 6 7 8]] [[ 9 10 11 12] [13 14 15 16]]]
In [ ]:
c = b.flatten()
print(c)
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
In [ ]:
c = b.ravel()
print(c)
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
flatten()과 ravel()은 NumPy 배열의 다차원 요소들을 1차원으로 펼치는 데 사용되는 함수입니다. 그러나 flatten()과 ravel()의 차이점은 반환된 배열의 복사본을 만들어내는지 여부입니다.¶
flatten(): flatten() 함수는 배열의 복사본을 반환합니다. 따라서, 원본 배열과는 독립적인 새로운 배열을 생성합니다. 만약 flatten()으로 반환된 배열을 수정하더라도 원본 배열에는 영향을 주지 않습니다.¶
ravel(): ravel() 함수는 배열의 뷰(view)를 반환합니다. 뷰는 원본 배열의 데이터에 대한 참조이므로, 원본 배열과 공유된 데이터를 사용합니다. 따라서, ravel()로 반환된 배열을 수정하면 원본 배열에도 영향을 줍니다.¶
배열의 연산¶
In [ ]:
%%time
a = np.arange(1,10001)
b = np.arange(20001,30001)
c = np.zeros_like(a)
for i in range(10000):
c[i] = a[i] + b[i]
print(c)
[20002 20004 20006 ... 39996 39998 40000] CPU times: user 9.53 ms, sys: 0 ns, total: 9.53 ms Wall time: 24.5 ms
In [ ]:
%%time
a = np.arange(1,10001)
b = np.arange(20001,30001)
c = a+b
print(c)
[20002 20004 20006 ... 39996 39998 40000] CPU times: user 2.12 ms, sys: 0 ns, total: 2.12 ms Wall time: 5.77 ms
In [ ]:
'데이터 분석 기초' 카테고리의 다른 글
| 기술통계, 시각화(6.8) (0) | 2023.06.08 |
|---|---|
| 데이터프레임 조작(6.7) (0) | 2023.06.08 |
| 16.퀴즈 (0) | 2023.03.15 |
| 15. 그룹화 (0) | 2023.03.15 |
| 14.함수 적용 (0) | 2023.03.15 |