【发布时间】:2013-07-19 19:13:48
【问题描述】:
我正在使用一个外部程序来计算一个用 C++ 编写并通过boost::python 与 python 接口的矩阵。我想将这个 C 数组传递给 numpy,根据作者的说法,这种能力已经用 numpy 的obj.__array_interface__ 实现了。如果我在 python 脚本中调用它并将 C++ 对象分配给X,我将获得以下信息:
print X
#<sprint.Matrix object at 0x107c5c320>
print X.__array_interface__
#<bound method Matrix.__array_interface__ of <sprint.Matrix object at 0x107c5c320>>
print X.__array_interface__()
#{'shape': (5, 5), 'data': (4416696960, True), 'typestr': '<f8'}
print np.array(X)
#Traceback (most recent call last):
# File "<string>", line 96, in <module>
#ValueError: Invalid __array_interface__ value, must be a dict
根据我有限的理解,我认为问题是X.__array_interface__ 实际上没有返回任何东西没有()。有没有办法将这些参数显式传递给 np.array 或解决此问题。
我对混合 C++ 和 python 真的很陌生,如果这没有意义或者如果我需要解释任何部分,请告诉我!
【问题讨论】:
-
np.array想要一本字典。看起来X.__array_interface__()返回一个字典。那么np.array(X.__array_interface__())不会这样做吗? -
这也是我最初的想法,但
np.array想要一个带有__array_interface__中字典的对象,请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html。所以np.array(X.__array_interface__())只返回字典。不幸的是np.array实际上是shared object,我缺乏操作它的理解。 -
丑陋但如何分配 X.__array_interface__ = X.__array_interface__() ?如果这失败了,您可能必须深入研究 c++ 并在那一侧构造一个 numpy 数组。
标签: c++ python boost numpy boost-python