source

numpy 배열을 튜플로 변환

ittop 2023. 7. 16. 17:57
반응형

numpy 배열을 튜플로 변환

참고: 이는 일반적인 튜플에서 어레이로 변환하는 것과 반대되는 것입니다.

(랩된 c++) 함수에 인수를 중첩 튜플로 전달해야 합니다.예를 들어, 다음과 같은 작업이 있습니다.

X = MyFunction( ((2,2),(2,-2)) )

반면에 다음은 그렇지 않습니다.

X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )

불행하게도, 제가 사용하고 싶은 주장은 제게 바보 같은 배열로 다가옵니다.해당 배열은 항상 일부 N에 대해 2xN 차원을 가지며, 이는 상당히 클 수 있습니다.

그것을 튜플로 쉽게 변환할 수 있는 방법이 있습니까?루프를 통해 새 튜플을 만들 수 있다는 것은 알지만, numpy 어레이가 제공하는 멋진 액세스가 있다면 더 좋습니다.

제가 바라는 것만큼 멋지게 할 수 없다면, 루프를 해서 하는 가장 예쁜 방법은 무엇일까요, 아니면 무엇일까요?

>>> arr = numpy.array(((2,2),(2,-2)))
>>> tuple(map(tuple, arr))
((2, 2), (2, -2))

이를 수행할 기능은 다음과 같습니다.

def totuple(a):
    try:
        return tuple(totuple(i) for i in a)
    except TypeError:
        return a

예를 들어 보겠습니다.

>>> array = numpy.array(((2,2),(2,-2)))
>>> totuple(array)
((2, 2), (2, -2))

저는 만족하지 못했기 때문에 결국 이것을 사용했습니다.

>>> a=numpy.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])

>>> tuple(a.reshape(1, -1)[0])
(1, 2, 3, 4, 5, 6)

더 빠를지는 모르겠지만 더 효과적으로 보입니다 ;)

다른 옵션

tuple([tuple(row) for row in myarray])

NumPy 배열을 C++ 함수로 전달하는 경우 Cython 또는 SWIG를 사용하는 방법도 검토할 수 있습니다.

만약 당신이 긴 컷을 좋아한다면, 여기 튜플(a_m의 a_m에 대한 튜플(a_m.tolist())

from numpy import array
a = array([[1, 2],
           [3, 4]])
tuple(tuple(a_m.tolist()) for a_m in a )

출력은 (1, 2), (3, 4)입니다.

a_m에 대한 튜플(a_m.tolist()은 생성자 표현식을 제공합니다.그레그 폰 윈켈의 대답에 대한 @norok2의 논평에서 영감을 받은 것 같습니다.

언급URL : https://stackoverflow.com/questions/10016352/convert-numpy-array-to-tuple

반응형