59doit

[Python-Numpy] #2 본문

Programming/Python(파이썬)

[Python-Numpy] #2

yul_S2 2022. 11. 6. 18:06
반응형

 

import numpy as np

 

브로드캐스팅(broadcasting)  

arr = np.arange(10)

arr
# <출력> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

arr[5]
# <출력> 5

arr[5:8]
# <출력> array([5, 6, 7])

arr[5:8] = 12                   # 5,6,7 자리에 12를 넣어라
arr
# <출력> array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])

 

 

# <arr>
# array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])

 

  • arr 슬라이스 생성
# <arr>
# array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])

arr_slice = arr [5:8]
arr_slice
# <출력> array([12, 12, 12])

 

 

  • arr_slice 값 변경하면 원래 배열의 값도 바뀐다
arr_slice[1] = 123456
arr
# <출력>
# array([     0,      1,      2,      3,      4,     12, 123456,     12,       8,      9])

 

 

  • [:] => 배열의 모든 값을 할당
arr_slice[:] = 64
arr
# <출력> array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])

 

  • copy
arr[5:8].copy()
arr
# <출력> array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])

 

다차원 배열 ; 2차원배열(대괄호2개) -> 1차원배열

arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[2]
# <출력> array([7, 8, 9])

 

  • 색인 
arr2d[0][2]         # <출력> 3
arr2d[0,2]          # <출력> 3

 

 

3차월배열 (대괄호 3개)

arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
arr3d
# <출력> 
# array([[[ 1,  2,  3],
#         [ 4,  5,  6]],
#        [[ 7,  8,  9],
#         [10, 11, 12]]])

arr3d[0]
# <출력> 
# array([[1, 2, 3],
#        [4, 5, 6]])

 

 

  •  copy 로 백업 하고 , 다시 원본으로 백업 시킬수있다
#copy 로 백업
old_values = arr3d[0].copy()   
arr3d[0] = 42
arr3d
# <출력>
# array([[[42, 42, 42],
#         [42, 42, 42]],
#        [[ 7,  8,  9],
#         [10, 11, 12]]])


#다시 원본으로 백업
arr3d = old_values            
arr3d
# <출력>
# array([[1, 2, 3],
#        [4, 5, 6]])

 

  • 1차원 배열의 값 반환
arr3d[1,0]
# <출력> 4

x=arr3d[1]
x       
# <출력> array([4, 5, 6])
x[0]
# <출력> 4

arr3d[1][0]
# <출력> 4

 

 

인덱싱 슬라이싱

arr   
# <출력> array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])
arr[1:6]
# <출력> array([ 1,  2,  3,  4, 64])

 

 

  • 2차원 슬라이싱
arr2d
# <출력>
# array([[1, 2, 3],
#        [4, 5, 6],
#        [7, 8, 9]])

arr2d[:2]            # 시작부터 두번째 로우까지의 선택
# <출력>
# array([[1, 2, 3],
#        [4, 5, 6]])


arr2d[:2,1:]
# <출력>
# array([[2, 3],
#        [5, 6]])

 

 

  • 정수색인과 슬라이스 같이 사용 -> 한차원낮은 슬라이스 선택
# 두번째 low 에서 처음 두 컬럼만
arr2d[1,:2]
# <출력>
# array([4, 5])


# 처음 두 low 에서 세번째 컬럼만
arr2d[:2,2]
# <출력>
# array([3, 6])



# 콜론만 쓰면 low는 전부다
arr2d[:,:1]
# <출력>
# array([[1],
#        [4],
#        [7]])


# 슬라이싱 선택 영역에 값 대입가능
arr2d[:2,1:] =0
arr2d
# <출력>
# array([[1, 0, 0],
#        [4, 0, 0],
#        [7, 8, 9]])

 

 

 

 

boolean 인덱싱

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7,4)   # 7x4 array
# randn 함수 이용 -> 표준정규분포 데이터 생성


names
# <출력> array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], dtype='<U4')

data
# 7x4 랜덤array 생성

data [names=='BOb']       
# true(조건에 맞는) 인 부분만 인덱스 결과 나옴
# index0, index3 에 해당

 

 

'!=' == '~' 사용

names != 'Bob'
# <출력> array([False,  True,  True, False,  True,  True,  True])

data[~(names == 'Bob')]
# <출력> 랜덤array 생성


cond = names=='Bob'   # cond에 names=='Bob' 담기
data[~cond]
# <출력> 같은 값으로 출력 data[~cond] = data[~(names == 'Bob')]

 

 

 

 

 

&(AND) 조건 과 |(OR)조건 => and 와 or 를 사용할 수 없고 & 과 | 을 사용

mask = (names == 'Bob') | (names == 'Will')
mask
# <출력> array([ True, False,  True,  True,  True, False, False])
data[mask]
# <출력> 랜덤array 생성

 

 

 

 

data 에 저장된 모든 음수를 0 으로 대입

data[data < 0] = 0
data
# <출력> 랜덤array 중에서 "<0" 인 값만 0으로 처리되어 출력

 

 

1 차원 불리언 배열을 사용해서 전체 로우나 컬럼을 선택하는 것은 쉽게 할 수 있다.

 

 

Fancy 색인

결과는 항상 1차원

 

 

8x4 배열

arr = np.empty((8, 4))        # 8x4 array
for i in range(8):
    arr[i] = i
arr
# <출력>
# array([[0., 0., 0., 0.],
#        [1., 1., 1., 1.],
#        [2., 2., 2., 2.],
#        [3., 3., 3., 3.],
#        [4., 4., 4., 4.],
#        [5., 5., 5., 5.],
#        [6., 6., 6., 6.],
#        [7., 7., 7., 7.]])

 

 

특정순서로 row 선택 시 해당 정수가 담긴 ndarray 나 리스트를 넘김

arr[[4, 3, 0, 6]]

# <출력>
# array([[4., 4., 4., 4.],
#        [3., 3., 3., 3.],
#        [0., 0., 0., 0.],
#        [6., 6., 6., 6.]])

 

 

색인 음수 => 끝에서부터 로우 선택

arr[[-3, -5, -7]]

# <출력>
# array([[5., 5., 5., 5.],
#        [3., 3., 3., 3.],
#        [1., 1., 1., 1.]])

 

 

 

reshape ;다차원 색인 배열 ; 각 색인 튜플에 대응하는 1차원 배열 선택

arr = np.arange(32).reshape((8,4))
arr
# <출력>
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11],
#        [12, 13, 14, 15],
#        [16, 17, 18, 19],
#        [20, 21, 22, 23],
#        [24, 25, 26, 27],
#        [28, 29, 30, 31]])

arr[[1,5,7,2],[0,3,1,2]]
# <출력> array([ 4, 23, 29, 10])

 

 

 

결과가 사각형 모양의 값이 되기위해서

arr[[1,5,7,2]][:,[0,3,1,2]]
# <출력>
# array([[ 4,  7,  5,  6],
#        [20, 23, 21, 22],
#        [28, 31, 29, 30],
#        [ 8, 11,  9, 10]])

 

 

 

.T : 행 렬 바꾸기 transpose

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

arr
# 3x5 array
# <출력>
# array([[ 0,  1,  2,  3,  4],
#        [ 5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14]])


# 행 렬 바꾸기  # 5x3 array

arr.T
# <출력>
# array([[ 0,  5, 10],
#        [ 1,  6, 11],
#        [ 2,  7, 12],
#        [ 3,  8, 13],
#        [ 4,  9, 14]])

 

 

내적 np.dot ★★

 

 

다차원 배열 => transpose 메서드는 튜플로 축 번호를 받아서 치환

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((1, 0, 2))
# <출력>
# array([[[ 0,  1,  2,  3],
#         [ 8,  9, 10, 11]],
#        [[ 4,  5,  6,  7],
#         [12, 13, 14, 15]]])

reshape 된 arrary 의 index 배열. (1,0,2) --> (2, 2, 4)

 

 

 

  • reshape 된 arrary 의 index 배열. (1,0,2) --> (3, 2, 4)
a = np.ones((2,3,4))

a
# <출력>
# array([[[1., 1., 1., 1.],
#         [1., 1., 1., 1.],
#         [1., 1., 1., 1.]],
#        [[1., 1., 1., 1.],
#         [1., 1., 1., 1.],
#         [1., 1., 1., 1.]]])



np.transpose(a, (1,0,2))
# <출력>
# array([[[1., 1., 1., 1.],
#         [1., 1., 1., 1.]],
#        [[1., 1., 1., 1.],
#         [1., 1., 1., 1.]],
#        [[1., 1., 1., 1.],
#         [1., 1., 1., 1.]]])

np.transpose(a, (1,0,2)).shape
# <출력> (3, 2, 4)

 

 

  • reshape 된 arrary 의 index 배열. (2, 1, 0) --> (4, 3, 2)
a = np.ones((2,3,4))

a
# <출력>
# array([[[1., 1., 1., 1.],
#         [1., 1., 1., 1.],
#         [1., 1., 1., 1.]],
#        [[1., 1., 1., 1.],
#         [1., 1., 1., 1.],
#         [1., 1., 1., 1.]]])



np.transpose(a,(2,1,0))
# <출력>
# array([[[1., 1.],
#         [1., 1.],
#         [1., 1.]],
#        [[1., 1.],
#         [1., 1.],
#         [1., 1.]],
#        [[1., 1.],
#         [1., 1.],
#         [1., 1.]],
#        [[1., 1.],
#         [1., 1.],
#         [1., 1.]]])

np.transpose(a,(2,1,0)).shape
# <출력> (4, 3, 2)

 

 

  • .swapaxes
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.swapaxes(1, 2)
# <출력>
# array([[[ 0,  4],
#         [ 1,  5],
#         [ 2,  6],
#         [ 3,  7]],
#        [[ 8, 12],
#         [ 9, 13],
#         [10, 14],
#         [11, 15]]])

 

 

geek

import numpy as geek

arr = geek.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
gfg = geek.swapaxes(arr, 0, 2)
print(gfg)
# <출력>
# [[[0 4]
#   [2 6]]
#  [[1 5]
#   [3 7]]]
import numpy as geek

arr = geek.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
gfg = geek.swapaxes(arr, 0, 2)
print(gfg)
# <출력>
# [[[0 4]
#   [2 6]]
#  [[1 5]
#   [3 7]]]

 

 

 

 

반응형

'Programming > Python(파이썬)' 카테고리의 다른 글

[Python-Numpy] #4  (0) 2022.11.06
[Python-Numpy] #3  (0) 2022.11.06
[Python-Numpy] #1  (0) 2022.11.06
[Python] os 모듈 파일 디렉터리 관련함수  (0) 2022.11.04
[Python] 예외처리  (0) 2022.11.04
Comments