numpy로 2d 좌표를 원소로 가지는 2차원 배열 만들기
조회수 3608회
안녕하세요, numpy로 배열을 만드는 중 난관에 부딪쳐 질문드립니다.
지금 위와 같이 2차원 좌표(x, y)를 원소로 가지는 2차원 배열을 만들고자 합니다.
numpy의 유용한 기능들을 잘 조합하면 for문을 쓰지 않고 이런 배열을 쉽게 만들 수 있지 않을까 고민하고 있습니다.
혹시 비슷한 문제를 겪고 해결하신 분이 있거나, 유용한 함수를 알고 계신 분은 댓글이나 답변 부탁드립니다.
감사합니다 :)
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
아래와 같이 리스트 컴프리헨션으로 간단하게 가능합니다. 꼭 리스트 컴프리헨션을 안 쓰고 그냥 for 문 두 개 써도 되고요. 한줄에 되니까 간결해 보이는 거고요.
그리고, 예제는 안 썼지만,
itertools
에product
라는 함수도 있습니다.>>> from pprint import pprint >>> l = [ (x, y) for x in (0, 1, 2, 3) for y in (0, 1, 2, 3) ] >>> pprint(l) [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3)] >>> l = [ [ (x, y) for x in (0, 1, 2, 3) ] for y in (0, 1, 2, 3) ] >>> pprint(l) [[(0, 0), (1, 0), (2, 0), (3, 0)], [(0, 1), (1, 1), (2, 1), (3, 1)], [(0, 2), (1, 2), (2, 2), (3, 2)], [(0, 3), (1, 3), (2, 3), (3, 3)]] >>> import pandas as pd >>> import numpy as np >>> ll = np.array(l) >>> ll array([[[0, 0], [1, 0], [2, 0], [3, 0]], [[0, 1], [1, 1], [2, 1], [3, 1]], [[0, 2], [1, 2], [2, 2], [3, 2]], [[0, 3], [1, 3], [2, 3], [3, 3]]]) >>> ll[0] array([[0, 0], [1, 0], [2, 0], [3, 0]])
-
제가 스스로도 답변을 달 수 있는 것 같네요 ㅋㅋㅋㅋ
제가 찾은 방법에 대해 공유하고자 합니다.import numpy as np # (5, ) 크기의 numpy 배열 생성 x = np.array([i for i in range(5)]) y = np.array([j for j in range(5)]) # (5, 5) 크기의 numpy 배열 생성 x = np.tile(x, (5, 1)) y = np.tile(y.reshape(5, 1), (5)) # (5, 5, 2) 크기의 numpy 배열 생성 xy = np.dstack((x, y))
numpy의 tile과 dstack 함수를 사용했습니다.
제가 원래 원했던 코드의 방향이 이런 형식이라 구체화해서 작성해봅니다 :)
감사합니다
-
(•́ ✖ •̀)
알 수 없는 사용자
- ㅋㅋㅋㅋ는 무슨 의미에요? nowp 2019.8.16 16:17
- @daewon 그냥 제가 제 질문에 답변을 할 수 있는게 신기해서요 ㅎㅅㅎ 알 수 없는 사용자 2019.8.19 15:38
- @BlueHorn07 그랬군요. nowp 2019.8.19 15:48
-
댓글 입력