배열의 값을 역순으로 추출
* np.arange(3, 10, 2)
-> array([3, 5, 7, 9])
# 역순으로 추출
* np.arange(10, 3, -2)
# 스텝을 -로 지정해서 역순 추출. 스텝을 지정하지 않으면 빈칸으로 추출됨
-> array([10, 8, 6, 4])
* np.arange(3,10,2)[::-1]
-> array([9, 7, 5, 3])
* np.flip(np.arange(3,10,2))
-> array([9, 7, 5, 3])
1차원 배열로 대각선 배열을 생성하거나, 다차원 배열로 대각선의 값들을 1차원으로 리턴할 수 있음
a = np.array([10, 20, 30, 40, 50, 60])
1차원 배열을 생성
-> [10 20 30 40 50 60]
* np.diag(a) # 1차원 배열로 대각선 값을 채우고 나머지는 0으로 생성
-> array([[10, 0, 0, 0, 0, 0],
[ 0, 20, 0, 0, 0, 0],
[ 0, 0, 30, 0, 0, 0],
[ 0, 0, 0, 40, 0, 0],
[ 0, 0, 0, 0, 50, 0],
[ 0, 0, 0, 0, 0, 60]])
* np.diag((10,20,30,40,50,60)) # 직접 인자로 주어도 됨
-> array([[10, 0, 0, 0, 0, 0],
[ 0, 20, 0, 0, 0, 0],
[ 0, 0, 30, 0, 0, 0],
[ 0, 0, 0, 40, 0, 0],
[ 0, 0, 0, 0, 50, 0],
[ 0, 0, 0, 0, 0, 60]])
* np.diag((10,20,30,40,50,60), k=2)
# k는 대각선의 시작위치를 나타냄. 2를 주면 3열부터 대각선 값을 채움
# 다 채우고 밑에 k의 수 대로 0배열을 생성
-> array([[ 0, 0, 10, 0, 0, 0, 0, 0],
[ 0, 0, 0, 20, 0, 0, 0, 0],
[ 0, 0, 0, 0, 30, 0, 0, 0],
[ 0, 0, 0, 0, 0, 40, 0, 0],
[ 0, 0, 0, 0, 0, 0, 50, 0],
[ 0, 0, 0, 0, 0, 0, 0, 60],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0]])
* np.diag((10,20,30,40,50,60), k=-2)
# 음수도 가능. -2를 주면 3행부터 대각선 값을 채움
# 음수는 위에 k의 수 대로 0배열을 생성
-> array([[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[10, 0, 0, 0, 0, 0, 0, 0],
[ 0, 20, 0, 0, 0, 0, 0, 0],
[ 0, 0, 30, 0, 0, 0, 0, 0],
[ 0, 0, 0, 40, 0, 0, 0, 0],
[ 0, 0, 0, 0, 50, 0, 0, 0],
[ 0, 0, 0, 0, 0, 60, 0, 0]])
ar = np.arange(12).reshape(3,4)
2차원(다차원) 배열 생성
-> [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
* np.diag(ar)
-> array([ 0, 5, 10]) # 대각선의 값을 1차원 배열로 리턴
* np.diag(ar, k=2)
-> array([2, 7]) # k=2기 때문에 3열부터 대각선 값 리턴(처음 0부터)
* np.diag(ar, k=-2) # 음수는 3행부터 대각선 값 리턴
-> array([8])
대각선의 값을 1로 생성.
one-hot 전용함수 : 데이터셋이 있을 경우 하나만 1이고 나머지는 0으로 채우는 것
** one-cold : 데이터셋이 있을 겨우 하나만 0이고 나머지는 1로 채우는 것
* np.identity(5) # 5x5 배열의 대각선에 1로 값을 채움
-> array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
* ex) 10x10의 행렬을 만들어 지정된 원본데이터를 대입시켜 one-hot을 리턴해보자
a = [1,4,2,6,5]
np.identity(10)[a]
# 10x10 배열에 a의 형식을 대입시켜 a각각 요소에 해당되는 위치에 1로 생성
# 대입시키는 요소의 범위는 배열 크기에 맞추어야 함(예시에선 a의 요소값이 9를 넘기면 안됨)
-> array([[0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], # 1
[0., 0., 0., 0., 1., 0., 0., 0., 0., 0.], # 4
[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.], # 2
[0., 0., 0., 0., 0., 0., 1., 0., 0., 0.], # 6
[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]]) # 5
* ex02)
a = [2,2,0,1,0]
np.identity(3)[a]
# 3x3 배열에 a의 형식을 대입시킴.
# 3행인데 a의 요소는 5개라서 행이 추가됨
# 대입시키는 요소의 범위는 배열 크기에 맞추어야 함(예시에선 a의 요소값이 2를 넘기면 안됨)
-> array([[0., 0., 1.],
[0., 0., 1.],
[1., 0., 0.],
[0., 1., 0.],
[1., 0., 0.]])
np.eye는 열의 크기를 지정할 수 있음
* np.eye(3)
-> array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
* np.eye(4, k=1, M=3) # k는 시작위치, M은 열의 크기
-> array([[0., 1., 0.],
[0., 0., 1.],
[0., 0., 0.],
[0., 0., 0.]])