numpy로 2d 좌표를 원소로 가지는 2차원 배열 만들기

조회수 51회

안녕하세요, numpy로 배열을 만드는 중 난관에 부딪쳐 질문드립니다.

이미지

지금 위와 같이 2차원 좌표(x, y)를 원소로 가지는 2차원 배열을 만들고자 합니다.

numpy의 유용한 기능들을 잘 조합하면 for문을 쓰지 않고 이런 배열을 쉽게 만들 수 있지 않을까 고민하고 있습니다.

혹시 비슷한 문제를 겪고 해결하신 분이 있거나, 유용한 함수를 알고 계신 분은 댓글이나 답변 부탁드립니다.

감사합니다 :)

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    아래와 같이 리스트 컴프리헨션으로 간단하게 가능합니다. 꼭 리스트 컴프리헨션을 안 쓰고 그냥 for 문 두 개 써도 되고요. 한줄에 되니까 간결해 보이는 거고요.

    그리고, 예제는 안 썼지만, itertoolsproduct 라는 함수도 있습니다.

    >>> 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 함수를 사용했습니다.

    제가 원래 원했던 코드의 방향이 이런 형식이라 구체화해서 작성해봅니다 :)

    감사합니다

    • ㅋㅋㅋㅋ는 무슨 의미에요? daewon 2019.8.16 16:17

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.