일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 랜섬웨어
- ES6
- 보안뉴스 요약
- 카카오프로젝트100
- php
- 자바스크립트 jQuery
- 자바스크립트 기본 문법
- 자바스크립트 element api
- 카카오프로젝트
- python
- 자바스크립트 node
- oracle db
- 자바스크립트 API
- 깃허브
- 자바스크립트 객체
- 보안뉴스요약
- 자바스크립트 prototype
- 오라클
- 파이썬
- 카카오프로젝트 100
- numpy
- 보안뉴스한줄요약
- javascript
- 보안뉴스
- 보안뉴스 한줄요약
- 다크웹
- Oracle SQL
- 자바스크립트
- oracle
- GIT
- Today
- Total
FU11M00N
[ Numpy ] numpy 변환 (append, concatenate, c_, r_ , swap, flip) 본문
import numpy as np
import matplotlib.pyplot as plt
- 변환
reshape 가 배열의 순서를 유지하는 상태에서 배열의 형태만 유지한다면 아예 새로운 배열로 변환하는 방법이 있습니다.
- append
np.append 는 두개의 1차원 배열을 합칠 수 있습니다.
np.append( 배열1, 배열2 )
다차원 배열의 경우 append 는 이를 모두 1차원 배열로 변형하여 합칩니다.
narr1 = np.array([1,2,3])
narr2 = np.array([4,5])
print( np.append(narr1, narr2) )
- concatenate
np 는 concatenate 를 이용하여 다차원 배열의 병합이 가능합니다.
concatenate( (배열1, 배열2, .. ) , axis=병합차원 )
axis 는 [[1,2]] 과 [[3,4]] 의 병합시 0 일때 [[1,2], [3,4]] 가 되고 1 일때 [[1,2,3,4]] 가 됩니다.
narr1 = np.array([[1,2],[3,4]])
narr2 = np.array([[5,6],[7,8]])
print( "axis = 0 : \n", np.concatenate( ( narr1, narr2), axis=0) )
print( "axis = 1 : \n", np.concatenate( ( narr1, narr2), axis=1) )
- c_, r_
또한 간략한 버젼으로 c_, r_ 을 사용합니다.
r_ 은 axis=0 의 병합을, c_ 는 axis=-1 의 병합을 지원합니다.
쉽게말해 컬럼과 로우 입니다.
x1 = np.array([[1,2],[3,4]])
x2 = np.array([[5,6],[7,8]])
print( np.c_[x1, x2] ) # 행으로 병합
print( np.r_[x1, x2] ) # 열로 병합
위의 예제를 조금 응용하여 이미지에 r_을 사용하여 이미지를 위 아래로 병합한 예제는 아래와 같습니다.
img1 = np.full((50,50,3),[255,0,0])
img2 = np.full((50,50,3),[0,0,255])
plt.imshow(np.r_[img1, img2])
plt.show()
두 컬러 임지ㅣ를 옆으로 붙일때는 c_를 사용하면 되겠다고 생각하면 쉽습니다.
하지만 c_는 두 배열의 가장 마지막축을 기준으로 붙입니다.
(50,50,3) 배열 둘을 c_ 로 붙이면 (50,100,3) 이 아니라 (50,50,6) 이 되므로 이미지 자체가 깨지게 되는데,
이 경우는 concatenate 를 사용해서 두번째 축을 기준으로 붙여야 합니다.
plt.imshow( np.concatenate((img1,img2), axis = 1) )
- stack
stack 은 배열을 다시 또 하나의 배열로 묶습니다.
이는 배열의 차원의 증가를 동반하는것입니다.
np.stack( [ np.array([1,2]), np.array([3,4]) ] )
concatenate 와 비슷해보일수있지만 아래의 예제를 통해 다른점도 확인가능합니다.
x,y = np.array([[1,2],[3,4]]), np.array([[5,6],[7,8]])
print("stack result:")
print( np.stack([x,y], axis = 0))
print("concatenate result:")
print( np.concatenate([x,y], axis = 0))
- swap
swap 은 배열의 축의 순서를 서로 변경할 수 있습니다.
(n,m) 의 형태를 가진 데이터가 있을 경우 이를 (m,n) 의 형태로 교체해줍니다.
이때 n 은 0번째 축 ( axis=0 ) , m 은 1번째 축 ( axis=1 ) 이기 때문에 다음과 같이 두 축을 서로 교환할 수 있습니다.
narr = np.arange(8).reshape(2,4)
print(narr)
print( np.swapaxes(narr, 0, 1) ) # narr 의 0번과 1번 축을 서로 교환
- flip
flip 은 배열의 순서를 뒤집을 수 있습니다.
narr = np.array([1,2,3])
print( np.flip(narr) )
-> [3,2,1]
다차원 배열일 경우 axis = ? 의 파라미터를 이용해 어느 축을 기준으로 역순배열을 만들 것인지 결정됩니다.
만일 axis 가 주어지지 안을 경우 모든 축을 역순으로 배치합니다.
narr = np.arange(8).reshape(2,4)
print(narr)
print("\nflip by axis 0 ")
print( np.flip(narr,axis=0) ) # narr 의 세로(0번)축을 기준으로 반전
print("\nflip by axis 1 ")
print( np.flip(narr,axis=1) ) # narr 의 가로(1번)축을 기준으로 반전
print("\nflip without axis ")
print( np.flip(narr) ) # narr 의 모든 축을 반전
또 하나의 배열 역전 방법은 ::-1 표기를 사용하는 것입니다.
narr = np.array([1,2,3])
print( narr[::-1] ) )
->
[3,2,1]
이 방법은 여러 축중에 특정 축들을 동시에 역전시킬 수도 있습니다.
narr = np.array([[1,2],[3,4]])
print(np.flip(narr, axis = 0))
print(narr[::-1,:])
print(narr)
'AI > Numpy' 카테고리의 다른 글
[ numpy ] 다중 회귀분석 (0) | 2021.04.05 |
---|---|
[ Numpy ] 회귀분석 , 선형 회귀분석 , sklearn.linear_model , 결정계수 (0) | 2021.04.05 |
[ Numpy ] numpy 조건문, 배열의 비교연산 , and or ! , where (0) | 2021.03.29 |
[ Numpy ] 랜덤데이터 활용, 확산 직선, 군집데이터 (0) | 2021.03.29 |
[ Numpy ] Numpy 배열 연산 (0) | 2021.03.22 |