注意:这要求反转通常的元组到数组转换。
我必须将一个参数传递给(包装的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数组提供的一些不错的访问。
如果不可能像我希望的那样做得很好,通过循环或其他方式做到最漂亮的方法是什么?
答案 0 :(得分:121)
>>> arr = numpy.array(((2,2),(2,-2)))
>>> tuple(map(tuple, arr))
((2, 2), (2, -2))
答案 1 :(得分:24)
这是一个可以做到的功能:
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))
答案 2 :(得分:6)
我不满意,所以我最后用了这个:
>>> 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)
我不知道它是否更快,但它看起来更有效;)
答案 3 :(得分:3)
另一个选择
tuple([tuple(row) for row in myarray])
如果要将NumPy数组传递给C ++函数,您可能还希望查看使用Cython或SWIG。
答案 4 :(得分:1)
如果您喜欢大刀阔斧,这是另一种方式 tuple(a中a_m的元组(tuple(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中的a_m的元组(a_m.tolist()))将给出生成器表达。 @ norok2对 Greg von Winckel's answer的评论颇为启发