데이터분석/전처리

[파이썬] numpy array 다루기

씩씩한 IT블로그 2020. 6. 22. 22:27
반응형
import numpy as np

'''
---------------------------------------------------------------------
1. 모양확인 (numpy.ndarray.shape)
- 1차원부터 차례대로 개수를 확인
- 공통된 부분까지만 출력된다.
---------------------------------------------------------------------
'''
x=np.array([[[1,4],[5,6]],[[1,2],[7,8]],[[4,1],[66,4]]])
print(x.shape) # (3,2,2)
x=np.array([[[1,4],[5,6]],[[1,2],[7,8]],[[4,1],[66,4]],[2,7]])
print(x.shape) # (4,2)


'''
---------------------------------------------------------------------
2. 모양바꾸기 : a*b행렬을 c*d(a*b==c*d)로 바꾼다 (numpy.ndarray.reshape)
<<변환전>>
[[1 2 3]
 [5 6 7]]
<<변환후>>
[[1 2]
 [3 5]
 [6 7]]
---------------------------------------------------------------------
'''
x=np.array([[1,2,3],[5,6,7]])
x=x.reshape(3,2) => -1을 넣으면 해당 위치에 알맞은 숫자가 자동으로 들어감
                    ex) (-1,2)를 넣으면 자동으로 -1에 3이 들어감
print(x)


'''
---------------------------------------------------------------------
3. 배열합치기 (numpy.concatenate)
 - axis=0 : y축으로 합치기 (열개수가 같은 두 리스트 위아래로 붙이기)
 - axis=1 : x축으로 합치기 (행개수가 같은 두 리스트 좌우로 붙이기)
---------------------------------------------------------------------
'''
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
cY=np.concatenate((A,B),axis=0) #합치고자 하는 list들은 다시한번 괄호로 묶어줘야함
print(cY)
'''
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
'''
cX=np.concatenate((B,A),axis=1)
print(cX)
'''
[[1 2 5 6]
 [3 4 7 8]]
'''


'''
---------------------------------------------------------------------
4. 배열나누기 (numpy.split)
 (1) 축
  - axis=0 : y축으로 나누기 (위아래로 나누기)
  - axis=1 : x축으로 나누기 (좌우로 나누기)
 (2) 나누는 방법
  - np.split(A,n,axis=m)     : A리스트를 m축을 기준으로 n개로 똑같이 나눔(n으로 나눠떨어져야함)
  - np.split(A,[a,b],axis=m) : A리스트를 m축을 기준으로 a,b인덱스로 나눔 (len([a,b])+1개로 나뉨)
    이때 a,b의 리스트속 값의 인덱스-1에 위치
    ex) [5,6,8,2,3]의 경우=> [ (0) 5, (1) 6, (2) 8, (3) 2, (4) 3 (5)]
---------------------------------------------------------------------
'''
A = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],[6,5,3,2]])
print(A)

print("--------2로나눔(y축)-------")
splitY=np.split(A,2,axis=0)
for i in range(len(splitY)):
    print(splitY[i])

print("--------리스트로나눔(y축)-------")
splitY=np.split(A,[0,3],axis=0)
for i in range(len(splitY)):
    print(splitY[i])

print("--------2로나눔(x축)-------")
splitX=np.split(A,2,axis=1)
for i in range(len(splitX)):
    print(splitX[i])
    
print("--------리스트로나눔(x축)-------")
splitX=np.split(A,[1,3],axis=1)
for i in range(len(splitX)):
    print(splitX[i])
<<아웃풋값>>

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [ 6  5  3  2]]
--------2로나눔(y축)-------
[[1 2 3 4]
 [5 6 7 8]]
[[ 9 10 11 12]
 [ 6  5  3  2]]
--------리스트로나눔(y축)-------
[]
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
[[6 5 3 2]]
--------2로나눔(x축)-------
[[ 1  2]
 [ 5  6]
 [ 9 10]
 [ 6  5]]
[[ 3  4]
 [ 7  8]
 [11 12]
 [ 3  2]]
--------리스트로나눔(x축)-------
[[1]
 [5]
 [9]
 [6]]
[[ 2  3  4]
 [ 6  7  8]
 [10 11 12]
 [ 5  3  2]]
[]

 

'''
---------------------------------------------------------------------
5. 차원늘리기
 (1) 축 (axis=n)
  - n차원을 늘린다 (0차원부터 시작, 맨끝은 -1)
  - n을하면 array.shape에 n 인덱스에 1을 추가하는것과 같은 효과
---------------------------------------------------------------------
'''
print(X_test.shape) #(4, 28, 28)
X_test = np.expand_dims(X_test, axis=-1)
print(X_test.shape) #(4, 28, 28, 1)
'''
---------------------------------------------------------------------
6. 각각의 요소들의 평균을 다음과같이 구할 수 있다.
---------------------------------------------------------------------
'''
a=np.array([[1,2],[3,5]])
b=(a[:,0]+a[:,1])/2

print(b)

a=np.array([[[1,2,3],[4,5,6]],
            [[5,7,8],[6,4,2]],
           ])
b=(a[:,:,0]+a[:,:,1]+a[:,:,2])/3
print(b)
[1.5 4. ]
[[2.         5.        ]
 [6.66666667 4.        ]]
반응형