본문 바로가기
Python

[Python] 2차원 이상의 배열을 각각 axis로 배열 만들기

by bryan.oh 2021. 6. 8.
반응형

아래와 같은 배열이 있을 때,
(배열의 배열도되고, 튜플의 배열도 됩니다.)

all = [
  (0, 'a'),
  (1, 'b'),
  (2, 'c'),
  (3, 'd')
]

여기서 행으로 나눈 [0,1,2,3] 과 ['a', 'b', 'c', 'd'] 의 배열을 만들고 싶다면

 

방법1. 일반적인 방법

a, b = [], []
for al in all:
    a.append(al[0])
    b.append(al[1])
# a : [1,2,3,4]
# b : ['a','b','c','d']

방법2. numpy 사용

na = np.array(all)
a = list(na[:, 0])
b = list(na[:, 1])

단순히 list 를 뽑아내기만 하는거면 numpy 사용 비추입니다. 

방법3. map, zip 사용

a, b = list(map(list, zip(*all)))
방법3이 코드가 깔끔하네요.
만약에 2차원 배열의 수가 늘어나더라도 리턴 받는 변수만 늘리면 됩니다.
a, b, d, e = list(map(list, zip(*all))) # 이런 식으로.

 

 

속도는 어떨까요?

셋다 아주 빠르지만, 데이터가 많아지면 numpy는 다른 것들에 비해 느립니다.

10만건의 데이터로 all 을 만들고 실행해봤습니다.

빠른 순서는 for문 > map+zip > numpy 순 이네요.

저렇게 써야할 일이 있어서 한번 비교해봤습니다~

 

추가로

하나의 axis만 뽑아야 할때는 아래와 같이 사용하면 빠릅니다. 
(다만, 아래 코드를 두번 쓰면 두배로 느려지겠죠)

a = list(map(lambda x: x[0], all))


728x90
반응형

댓글