Programming

Python Library_Numpy2[축 전환, 배열연결]

HongDaang 2023. 3. 22. 10:34

ABC부트캠프_2023.03.22

- 팬시인덱스 : 정수배열인덱스

      인덱스 배열의 원소 각각이 원래 ndarray 객체 원소 하나를 가리키는 인덱스 정수여야함.

 

import numpy as np
a = np.array([11,12,13,14,15,16,17,18,19])
idx = np.array([0,2,4,6,8])
a[idx]


array([11, 13, 15, 17, 19])
idx = np.array([0,1,0,0,2,2,8])
a[idx]

array([11, 12, 11, 11, 13, 13, 19])
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
a

array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

<위의 배열 슬라이싱 하기>

더보기
a[: , [True, False, False, True]]    # 전체 행, True에 해당하는 열

array([[ 1,  4],
       [ 5,  8],
       [ 9, 12]])
a[[2,0,1], : ]     # 2,0,1   -> 순서에 맞게 3행-1행-2행 순서로

array([[ 9, 10, 11, 12],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8]])


축 전환

Python Numpy 행렬 전치 3가지 방법

 

 

    -2차원

arr = np.arange(15).reshape(3,5)
arr

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

1) arr.T 사용

   transposing 2D array : T attribute

arr.T     #축 전환

array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

2) arr.transpose() 사용

   transpose method : numpy.transpose(a, axes=None)

arr.transpose() # 축 전환

array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])
더보기
arr.transpose(0,1)    #다시 원래대로

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
       
       
arr.transpose(1,0)    # 행과 열을 바꾸겠다는 뜻

array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

 

   - 3차원

arr = np.arange(16).reshape((2,2,4))
arr

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

-arr.transpose()사용

arr.transpose((1,0,2))  # 축번호를 받아 치환

array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])
        
        
arr.transpose((2,0,1))

array([[[ 0,  4],
        [ 8, 12]],

       [[ 1,  5],
        [ 9, 13]],

       [[ 2,  6],
        [10, 14]],

       [[ 3,  7],
        [11, 15]]])

- arr.swapaxes()사용

  swapaxes method : numpy.swapaxes(a, axis1, axis2)

arr.swapaxes(1,2)    #축 번호로 배열을 뒤바꿈/ swapaxes(2,1)  = transpose(0,2,1)

array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])


배열 연결


- hstack
- vstack
- dstack
-stack
- tile

1) hstack

#hstack : 행의 수가 같은 두개 이상의 배열을 옆으로 연결
a1 = np.ones((2,3))
a1

array([[1., 1., 1.],
       [1., 1., 1.]])


b1 = np.zeros((2,2))
b1

array([[0., 0.],
       [0., 0.]])
       
       
np.hstack([a1,b1])

array([[1., 1., 1., 0., 0.],
       [1., 1., 1., 0., 0.]])

2) vstack

#vstack : 열의 수가 같은 두개 이상의 배열을 위 아래로 연결
# 열의 수가 같아야 붙일 수 있음
a2 = np.ones((2,3))
a2

array([[1., 1., 1.],
       [1., 1., 1.]])
       
       
b2 = np.zeros((3,3))
b2

array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
       
       
np.vstack([a2,b2])

array([[1., 1., 1.],
       [1., 1., 1.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

3) dstack

#dstack : 깊이방향으로 배열을 합침
# (2 * 3) --> (2 * 3 * 2)
c1 = np.ones((2,3))
c1

array([[1., 1., 1.],
       [1., 1., 1.]])
       

c2 = np.zeros((2,3))
c2

array([[0., 0., 0.],
       [0., 0., 0.]])
       
       
np.dstack([c1,c2])

array([[[1., 0.],
        [1., 0.],
        [1., 0.]],

       [[1., 0.],
        [1., 0.],
        [1., 0.]]])

4) stack

#stack : 사용자가 지정한 축으로 연결
c= np.stack([c1,c2])
c

array([[[1., 1., 1.],
        [1., 1., 1.]],

       [[0., 0., 0.],
        [0., 0., 0.]]])
        
        
c.shape
(2, 2, 3)


c = np.stack([c1, c2], axis=1)
c

array([[[1., 1., 1.],
        [0., 0., 0.]],

       [[1., 1., 1.],
        [0., 0., 0.]]])
        
        
c.shape
(2, 2, 3)

5) tile

#tile : 동일한 배열을 반복 연결
a= np.array([[0,1,2],[3,4,5]])
np.tile(a,2)     # 2번 반복


array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5]])
       
       
np.tile(a, (3, 2))    # 밑으로 3개 옆으로 2개

array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5],
       [0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5],
       [0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5]])