137

注:これは、通常のタプルから配列への変換の逆を求めています。

ネストされたタプルとして (ラップされた C++) 関数に引数を渡す必要があります。例えば、以下の作品

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

一方、以下はそうではありません

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

残念ながら、私が使用したい引数は numpy 配列として私に来ます。その配列は常に、いくつかの N に対して 2xN の次元を持ち、非常に大きい場合があります。

それをタプルに変換する簡単な方法はありますか? ループして新しいタプルを作成するだけでよいことはわかっていますが、numpy 配列が提供する優れたアクセスがあればよいと思います。

私が望むようにこれを行うことができない場合、ループなどで行う最も美しい方法は何ですか?

4

5 に答える 5

199
>>> arr = numpy.array(((2,2),(2,-2)))
>>> tuple(map(tuple, arr))
((2, 2), (2, -2))
于 2012-04-04T17:35:41.920 に答える
35

これを行う関数は次のとおりです。

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))
于 2012-04-04T17:52:23.107 に答える
12

私は満足していなかったので、最終的にこれを使用しました:

>>> 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)

速いかどうかはわかりませんが、より効果的に見えます;)

于 2013-08-12T13:35:06.367 に答える
6

別のオプション

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

NumPy 配列を C++ 関数に渡す場合は、Cython または SWIG の使用も検討することをお勧めします。

于 2014-05-01T18:50:15.230 に答える