1.
import numpy as np
A = np.array([[1, 2],[3, 4],[5, 6]])
print(A)
print(A.shape)
print(A.dtype)
<출력값>
[[1 2]
[3 4]
[5 6]]
(3, 2)
int32
3X2 배열을 입력하면 shape(배열의 형상. 즉 행렬을 포함한 N차원 배열에서 그 배열의 각 차원의 크기)가 (3,2)라고 출력된다.
2.
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[3,0],[0,6]])
print(A+B)
<출력값>
[[ 4 2]
[ 3 10]]
3.
넘파이 배열에서는 두 배열의 형상(shape)이 같아야만 곱도 할 수 있다.
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[3,0],[0,6]])
print(A*B)
<출력값>
[[ 3 0]
[ 0 24]]
이때 행렬의 곱과는 방식이 다르다.
원소별로 각각 곱해진다.
상수 a,b,c,d,e,f,g,h가 있다고 할 때
import numpy as np
A = np.array([[a,b],[c,d]])
B = np.array([[e,f],[g,h]])
라면 A*B는
[[a*e b*f]
[c*g d*h]]
이다.
두 행렬의 곱과는 다르다는 것을 느낄 것이다.
(3x2) 행렬과 (2x2)행렬은 행렬의 곱을 통해 계산이 가능하지만 넘파이 배열에서는 곱의 방식이 원소별(elementwise)이기 때문에 넘파이 배열에서는 곱이 이루어지지 않는다.
import numpy as np
A = np.array([[1,2],[3,4],[5,6]])
B = np.array([[3,0],[0,6]])
print(A*B)
<출력값>
Traceback (most recent call last):
File "c:\Users\tina0\Desktop\python 실습들\Deep Learning-밑시딥\1.5 .py", line 31, in <module>
print(A*B)
ValueError: operands could not be broadcast together with shapes (3,2) (2,2)
4.
import numpy as np
A = np.array([[1,2],[3,4]])
print(A*10)
배열에 스칼라값 10을 곱하면 각각의 원소에 10이 곱해진다.
넘파이에서는 형상이 다른 배열끼리도 계산할 수 있다.
위에서와 같이 2x2행렬에 스칼라값인 10을 곱하는 것이 그것의 예시이다.
2x2 행렬에 스칼라값인 10이 곱해질 때에는 스칼라값이 2x2 행렬로 확대된 후 연산이 이루어진다.
이 기능을 브로드캐스트 라고 한다.
5.
넘파이 배열은 N차원 배열을 작성할 수 있다.
수학에서
1차원 배열은 벡터(vector)
2차원 배열은 행렬(matrix)
그리고 벡터와 행렬을 일반화한 것을 텐서(tensor) 이라고 한다.
6.
브로드캐스트는 이렇게도 가능하다.
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[10,20]])
print(A*B)
<출력>
[[10 40]
[30 80]]
여기서는 B가 곱해지면서
[[10 20]
[10 20]]
으로 확대된 것이다.
7. 인덱스
array A의 0행 찾기
import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
print(A[0])
<출력값>
[1 2]
array A의 (0,1) 찾기
이중 인덱싱으로 해주면 된다.
import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
print(A[0][1])
<출력값>
2
8.
import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
for row in A:
print(row)
<출력값>
[1 2]
[10 21]
[12 60]
9. 평탄화(flatten)
import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
Af = A.flatten()
print(Af)
print(type(Af))
<출력값>
[ 1 2 10 21 12 60]
<class 'numpy.ndarray'>
배열_이름.flatten()
을 이용하면 어떤 배열을 1차열 배열로 변환할 수 있다.(평탄화)
그리고 flatten 시켰을 때의 배열(여기서는 Af)은 원래 배열(A)와 동일하게 type이 numpy.ndarray이다.
10.
anaconda prompt는 Visual Studio Code와는 조금 다르다.
Visual Studio Code에도 여기서와 같이 print를 명령하지 않고도 출력할 수 있는 방법이 있을까?
모르겠다..
11. 인덱스가 n1,n2,n3인 원소 얻기
import numpy as np
A = np.array([[1,2], [10,21], [12,60]])
Af = A.flatten()
print(Af)
print(Af[np.array([0,2,4])])
<출력값>
[ 1 2 10 21 12 60]
[ 1 10 12]
이렇게 배열 Af에서 인덱스가 0,2,4인 원소를 얻을 수 있다.
다만 일반 리스트에서 인덱스하는 방법과는 달라서 조금 헷갈린다.
배열 만드는 방법으로 인덱스를 한다
'Deep Learning' 카테고리의 다른 글
[Deep Learning] 220805 학습일기 (0) | 2022.08.05 |
---|---|
[Deep Learning] 220803 학습일기 (0) | 2022.08.03 |
[Deep Learning] 220730 학습일기 (0) | 2022.07.30 |
[Deep Learning] 220729 학습일기 (0) | 2022.07.30 |
[Deep Learning] 220721 학습일기 (0) | 2022.07.23 |