Numpy (1차원, 2차원, 3차원 배열 / 배열 인덱싱)
Data Split
Numpy를 사용하기 위해서, numpy 모듈을 import한다
import numpy as np
Array
동일한 자료형으로 가지는 값들이 격자판 형태로 있는 것이다.
각 값들은 tuple 형태로 색인되고, rank는 배열이 몇 차원 배열인지 알려준다.
shape는 각 차원이 크기를 알려주는 정수들이 모인 tuple이다.
a = np.array([1,2,3])
print(type(a), a.shape, a[0], a[1], a[2])
print(a) #[5,2,3]
b = np.array([[1,2,3], [4,5,6]])
print(b)
```
[[1 2 3]
[4 5 6]]
```
print(b.shape) # (2, 3)
print(b[0, 0], b[0, 1], b[1, 0]) # 1 2 4
a = np.zeros((2,2))
print(a)
"""
[[0. 0.]
[0. 0.]]
"""
b = np.ones((1,2))
print(b)
# [[1. 1.]]
c = np.full((2,2), 3) #create a constant array
print(c)
"""
[[3 3]
[3 3]]
"""
eye(value) : value * value의 identity matrix 생성
b = a[:2, 1:3]
2차원까지 슬라이싱하고, 1, 2번째 값만 가져와서 저장한다.
print(a[0, 1])
b[0, 0] = 77
import numpy as np
a = np.array([[1,2], [3, 4], [5, 6]])
bool_idx = (a > 2) # Find the elements of a that are bigger than 2;
# this returns a numpy array of Booleans of the same
# shape as a, where each slot of bool_idx tells
# whether that element of a is > 2.
print(bool_idx)
a는 3 * 2 numpy 배열이다
a > 2처럼 배열 내의 요소를 하나하나 비교하는 형태로 명령문을 써주면 반환값에 bool matrix가 담기게 된다.
# We use boolean array indexing to construct a rank 1 array
# consisting of the elements of a corresponding to the True values
# of bool_idx
print(a[bool_idx])
# We can do all of the above in a single concise statement:
print(a[a > 2])
"""
[3 4 5 6]
[3 4 5 6]
"""
이렇게 반환된 bool형식의 matrix를 a라는 배열의 매개변수로 넣어주면, True인 부분만 1 array의 형태로 출력되는 것을 알 수 있다.
이렇게 같은 size를 갖는 matrix에 대해서 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 경우
요소 by 요소로 연산을 수행하면 된다.
주의해야할 것은 Numpy에서 '*'은 행렬곱이 아니다.
행렬곱은 dot함수로 계산이 가능하다.
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
v = np.array([9,10])
w = np.array([11, 12])
# Inner product of vectors; both produce 219
print(v.dot(w))
print(np.dot(v, w))
print(v @ w) # @연산자는 dot과 동일한 기능을 수행함.
"""
219
219
219
"""
# Matrix / vector product; both produce the rank 1 array [29 67]
# (9 10) x (1 2)
# (3 4)
print(x.dot(v))
print(np.dot(x, v))
print(x @ v)
"""
[29 67]
[29 67]
[29 67]
"""
(9 10) x (1 2) = 29
(9 10) x (3 4) = 67
즉 x와 v를 행렬곱하면 (29 67)의 1 array가 나타나게 된다.
x = np.array([[1,2],[3,4]])
print(np.sum(x)) # Compute sum of all elements; prints "10"
print(np.sum(x, axis=0)) # Compute sum of each column; prints "[4 6]"
print(np.sum(x, axis=1)) # Compute sum of each row; prints "[3 7]"
(1 2)
(3 4)
axis = 0 옵션으로 합하면 수직으로 요소가 합해져서 (4 6)으로 출력된다.
axis = 1 옵션으로 합하면 수평으로 요소가 합해져서 (3 7)로 출력된다.
print(x)
print("transpose\n", x.T)
[[1 2]
[3 4]]
transpose
[[1 3]
[2 4]]
x.T와 같이 호출해서 특정 행렬의 tranpose된 형태 (대각선을 기준으로 대칭)를 출력할 수 있다.
Data Split
import matplotlib.pyplot as plt
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
scatter(length, weight) 함수를 통해 x, y좌표에 값을 찍을 수 있다.
xlabel, ylabel함수로 x, y좌표축에 이름을 달 수도 있다!
# Making length and weight lists into two-dimensional lists
# The zip() function retrieves and returns an element from each of the listed lists
fish_data = [[l, w] for l, w in zip(fish_length, fish_weight)]
print(fish_data)
zip 함수를 이용해 나열된 목록에서 요소를 검색하고 반환한다.
length와 weight의 쌍을 저장해서 fish_data로 만들었다
fish_target = [1]*35 + [0]*14
print(fish_target)
총 49개의 샘플 중에서 35개를 Training set으로, 나머지 14개를 Test Set으로 사용할 수 있다.
이때 Sample들은 섞여있지 않은 상태이다.
# Data shuffling
# The random.seed() function sets the seed needed to generate random numbers
np.random.seed(42)
index = np.arange(49)
np.random.shuffle(index)
1) np.random.seed(42) 등으로 시드값을 부여
2) arange()함수를 이용해 0부터 48까지 1씩 증가하는 인덱스를 만든다.
3) shuffle의 매개변수에 이 인덱스를 넣어서 무작위로 섞는다.
'Major Study > Artificial Intelligence Application' 카테고리의 다른 글
인공지능 응용 실습) KNN (0) | 2022.04.18 |
---|---|
최적화 기법(Optimization) Linear/SVM/SoftMax Classifier (0) | 2022.04.16 |
Python 기본 문법 정리 (0) | 2022.04.15 |
선형 회귀(Linear Regression)의 개념과 Prediction (0) | 2022.04.03 |
Supervised Learning(지도 학습)의 개념 (0) | 2022.04.03 |