Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将numpy数组转换为元组_Python_Numpy - Fatal编程技术网

Python 将numpy数组转换为元组

Python 将numpy数组转换为元组,python,numpy,Python,Numpy,注意:这要求与通常的元组到数组转换相反 我必须将参数作为嵌套元组传递给(包装的c++函数)。例如,以下工作 X = MyFunction( ((2,2),(2,-2)) ) 然而,以下情况并非如此 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该数组的维数始终为2xN,这可能相当大 有没有一种简单的方法将其转换为元组?我知道我可以循环,创建一个新的元组,但是如果numpy数组提供了一些不错的访问,我会更喜欢 如果不能像我希望的那样很好地实现这一点,那么通过循环或其他方式实现这一点最

注意:这要求与通常的元组到数组转换相反

我必须将参数作为嵌套元组传递给(包装的c++函数)。例如,以下工作

X = MyFunction( ((2,2),(2,-2)) )
然而,以下情况并非如此

不幸的是,我想使用的参数是一个numpy数组。对于某些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或Sigg。p> 如果你喜欢长切,这里有另一种方法 tuple(tuple(a_m.tolist())表示a中的a_m)

输出是 ((1,2)、(3,4))

注意(a中的a的tuple(a_m.tolist())将给出一个生成器表达式。
某种程度上是受到@norok2对

Nice概括的评论的启发。不过,作为一名python新手,我想知道对于一种几乎和非异常状态一样常见的情况使用异常是否被认为是一种好的方式。至少在C++中,异常的流量控制通常是不被考虑的。测试type(a)=numpy.ndarray是否更好?这在python中非常常见,因为“duck typing”和EAFT的概念,更多信息:。这种方法的优点是,它可以将任何嵌套序列转换为嵌套元组,而不仅仅是数组。我应该做的一件事是,我指定了除了Butter块之外的错误。在C++中,由于各种原因,异常相对于条件句是慢的。在Python,它们在性能方面大致相同——这是我们必须在门口检查C++直觉的地方之一。这个解决方案是我需要的100%。谢谢这不是我想要的元组形状,它不能转换成元组。转换为列表?您尝试过吗?当我跑进去的时候,它会变成一个元组。注意,最后调用的函数是tuple,它返回一个tuple。如果您只有[…]部分而没有外部元组,那么您将得到一个元组列表。有没有更快的方法?您可以通过省略方括号来避免创建中间的
list
,即使用
tuple(tuple(row)表示myarray中的行)
因此对于简单的一维数组
tuple(arr)
tuple([tuple(row) for row in myarray])
from numpy import array
a = array([[1, 2],
           [3, 4]])
tuple(tuple(a_m.tolist()) for a_m in a )