반응형
아래와 같은 배열이 있을 때,
(배열의 배열도되고, 튜플의 배열도 됩니다.)
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
반응형
'Python' 카테고리의 다른 글
[Python] 문자열을 특정 개수로 묶어서 배열을 만들기 (0) | 2021.06.09 |
---|---|
[Python] list 의 item들을 특정 개수만큼 나눠서 배열을 만들기 (0) | 2021.06.09 |
[Python] convert uint16 to uint8 (0) | 2021.05.28 |
[python] queue 를 list 로 (queue to list) (0) | 2021.05.04 |
[Python] InvalidURL Url Encode / Url 한글 처리 (2) | 2021.04.20 |
댓글