注意:这要求反转通常的元组到数组转换.
我必须将一个参数传递给(包装的c ++)函数作为嵌套元组.例如,以下工作
X = MyFunction( ((2,2),(2,-2)) )
Run Code Online (Sandbox Code Playgroud)
而以下则没有
X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )
Run Code Online (Sandbox Code Playgroud)
不幸的是,我想要使用的论点是一个numpy数组.对于某些N,该数组总是具有2xN的尺寸,这可能非常大.
有没有一种简单的方法将其转换为元组?我知道我可以循环,创建一个新的元组,但更喜欢numpy数组提供的一些不错的访问.
如果不可能像我希望的那样做得很好,通过循环或其他什么方式来做最漂亮的方法呢?
Nik*_* B. 136
>>> arr = numpy.array(((2,2),(2,-2)))
>>> tuple(map(tuple, arr))
((2, 2), (2, -2))
Run Code Online (Sandbox Code Playgroud)
Bi *_*ico 25
这是一个可以做到的功能:
def totuple(a):
try:
return tuple(totuple(i) for i in a)
except TypeError:
return a
Run Code Online (Sandbox Code Playgroud)
一个例子:
>>> array = numpy.array(((2,2),(2,-2)))
>>> totuple(array)
((2, 2), (2, -2))
Run Code Online (Sandbox Code Playgroud)
小智 7
我不满意,所以我终于用了这个:
>>> 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)
Run Code Online (Sandbox Code Playgroud)
我不知道它是否更快,但它看起来更有效;)
另外一个选项
tuple([tuple(row) for row in myarray])
Run Code Online (Sandbox Code Playgroud)
如果您要将 NumPy 数组传递给 C++ 函数,您可能还希望查看使用 Cython 或 SWIG。
如果您喜欢长剪切,这是另一种方式 tuple(tuple(a_m.tolist()) for a_m in a )
from numpy import array
a = array([[1, 2],
[3, 4]])
tuple(tuple(a_m.tolist()) for a_m in a )
Run Code Online (Sandbox Code Playgroud)
输出为 ((1, 2), (3, 4))
请注意, (tuple(a_m.tolist()) for a_m in a ) 将给出生成器表达式。有点受到 @norok2 对Greg von Winckel 答案的评论的启发
| 归档时间: |
|
| 查看次数: |
139555 次 |
| 最近记录: |