본문 바로가기
python

[python]파이썬 - numpy_차원

by skysline 2023. 2. 10.
반응형
반응형

rand 함수

0~1 사이의 랜덤값 반환

np.random.rand() # np.random.seed() 고정값 

np.random.rand(2,7,3) # n개 n행 n 열

# 출력
array([[[0.92908681, 0.37724166, 0.08851154],
        [0.40941691, 0.46123658, 0.62042291],
        [0.78893884, 0.24289605, 0.22583355],
        [0.22813315, 0.99178992, 0.44116525],
        [0.367626  , 0.45813609, 0.18801338],
        [0.71825478, 0.91995478, 0.70026107],
        [0.35006165, 0.99012193, 0.16024383]],

       [[0.04291615, 0.12856985, 0.30758288],
        [0.10310448, 0.39525891, 0.65930864],
        [0.51128951, 0.29694251, 0.63119218],
        [0.58648806, 0.63222706, 0.72528489],
        [0.40521194, 0.78776605, 0.60526099],
        [0.67749703, 0.23590815, 0.23482064],
        [0.77555876, 0.99608793, 0.99616729]]])
np.random.seed(42)
arr = np.random.rand(100)
arr

# 출력
array([0.37454012, 0.95071431, 0.73199394, 0.59865848, 0.15601864,
       0.15599452, 0.05808361, 0.86617615, 0.60111501, 0.70807258,
       0.02058449, 0.96990985, 0.83244264, 0.21233911, 0.18182497,
       0.18340451, 0.30424224, 0.52475643, 0.43194502, 0.29122914,
       0.61185289, 0.13949386, 0.29214465, 0.36636184, 0.45606998,
       0.78517596, 0.19967378, 0.51423444, 0.59241457, 0.04645041,
       0.60754485, 0.17052412, 0.06505159, 0.94888554, 0.96563203,
       0.80839735, 0.30461377, 0.09767211, 0.68423303, 0.44015249,
       0.12203823, 0.49517691, 0.03438852, 0.9093204 , 0.25877998,
       0.66252228, 0.31171108, 0.52006802, 0.54671028, 0.18485446,
       0.96958463, 0.77513282, 0.93949894, 0.89482735, 0.59789998,
       0.92187424, 0.0884925 , 0.19598286, 0.04522729, 0.32533033,
       0.38867729, 0.27134903, 0.82873751, 0.35675333, 0.28093451,
       0.54269608, 0.14092422, 0.80219698, 0.07455064, 0.98688694,
       0.77224477, 0.19871568, 0.00552212, 0.81546143, 0.70685734,
       0.72900717, 0.77127035, 0.07404465, 0.35846573, 0.11586906,
       0.86310343, 0.62329813, 0.33089802, 0.06355835, 0.31098232,
       0.32518332, 0.72960618, 0.63755747, 0.88721274, 0.47221493,
       0.11959425, 0.71324479, 0.76078505, 0.5612772 , 0.77096718,
       0.4937956 , 0.52273283, 0.42754102, 0.02541913, 0.10789143])
arr.var(),arr.mean()
# 출력
(0.08761495016957914, 0.47018074337820936)
from numpy.random.mtrand import shuffle # 섞어준다
np.random.seed(42)  
arr = np.arange(50)
np.random.shuffle(arr)
arr

# 출력
array([13, 39, 30, 45, 17, 48, 26, 25, 32, 19, 12,  4, 37,  8,  3,  6, 41,
       46, 47, 15,  9, 16, 24, 34, 31,  0, 44, 27, 33,  5, 29, 11, 36,  1,
       21,  2, 43, 35, 23, 40, 10, 22, 18, 49, 20,  7, 42, 14, 28, 38])
np.random.choice(4,2) # 0~4 사이의 랜덤하게 추출

# 출력
array([1, 0])
np.random.choice(5,3,replace=False) # 중복값 없애기

# 출력
array([3, 1, 2])
np.random.choice(5,3,p=[1,0,0,0,0]) # 확률값이 1이 넘으면 안됨

# 출력
array([0, 0, 0])
np.random.choice(5,3,p=[0.2,0.2,0.2,0.2,0.2])# 확률값이 1이 넘으면 안됨

# 출력
array([3, 3, 0])
np.random.seed(42)
arr = np.random.randint(50,91,[4,3,2])
arr

# 출력
array([[[88, 78],
        [64, 57],
        [70, 88]],

       [[68, 72],
        [60, 60],
        [73, 85]],

       [[89, 73],
        [52, 71],
        [51, 73]],

       [[79, 87],
        [51, 70],
        [82, 61]]])
arr.sum(axis=2) # 3차원에선  1이 열 2가 행

# 출력
array([[166, 121, 158],
       [140, 120, 158],
       [162, 123, 124],
       [166, 121, 143]])

arr 에서 차원추가하기

arr[:,np.newaxis] # 열백터 라고부름

# 출력
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5]])
np.expand_dims(arr,axis=1)

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

전치

- transpose 는 차원을 맞바꿈
- reshape는 순서대로 차원을 변경함
arr2 = np.reshape(arr,[2,3])
arr2

# 출력
array([[0, 1, 2],
       [3, 4, 5]])
np.transpose(arr2) # arr2.T 와 같음

# 출력
array([[0, 3],
       [1, 4],
       [2, 5]])
arr = np.arange(12)
arr.reshape(2,3,2)

# 출력
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[ 6,  7],
        [ 8,  9],
        [10, 11]]])
arr.flatten() # 평평하게 만들기

# 출력
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

차원이 1인 차원제거

np.random.seed(42)
arr = np.random.randint(50,91,[4,1,2,1])
arr.shape

# 출력
(4, 1, 2, 1)
arr.squeeze()

# 출력
array([[88, 78],
       [64, 57],
       [70, 88],
       [68, 72]])
arr.squeeze(axis=1).shape

# 출력
(4, 2, 1)

배열 합치기

  • concatenate 함수
  • axis 방향으로
arr1 = np.array([
    [1,2],
    [3,4],
    [5,6]
])

arr2 = np.array([
    [10,20]
])
np.concatenate([arr1,arr2],axis=0)

# 출력
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [10, 20]])
arr2 = np.array([
    [10],
    [20],
    [30]
])
np.concatenate([arr1,arr2],axis=1)

# 출력
array([[10, 20, 10],
       [30, 40, 20],
       [50, 60, 30]])

stack 함수

  • 함치련는 차원의 크기가 모두 동일해야함
  • 합치려는 배열이 하나의 행으로 취급됨
arr2 = np.array([
    [10,20],
    [30,40],
    [50,60]
])


np.stack([arr1,arr2])

# 출력
array([[[ 1,  2],
        [ 3,  4],
        [ 5,  6]],

       [[10, 20],
        [30, 40],
        [50, 60]]])
np.stack([arr1,arr2]).shape

# 출력
(2, 3, 2)

numpy 배열 리스트로 변경하기

arr =np.arange(6).reshape(2,3)
arr

# 출력
array([[0, 1, 2],
       [3, 4, 5]])
arr.tolist() # 리스트로 변경

numpy 배열 파일로 저장

np.save("arr",arr) #.npy 확장자로 저장
np.load("arr.npy") # 불러오기
ar2 = arr.copy() # 복사
반응형

댓글