我用C++的基本功能定义了自己的NUMPY类型。数组创建是有效的,并且可以对这种类型的数组进行加法和除法。使用np.sum
可以减少数组,但是使用np.mean
时解释器崩溃。在
import numpy as np
from example import Dual
x = np.array([Dual(1, 2), Dual(1, 3), Dual(1, 1)])
print(x.dtype) # dtype(Dual) -- correct type
# Mean 1
m = x.sum() / x.size
print(m.x, m.y) # 1.0 2.0 -- correct result
# Mean 2
x.mean() # -- CRASH
< P>通过在我的C++代码中插入调试输出,我验证了在我的代码中正确计算和和除法(3/3和6/3是实际执行的)。所以函数在计算结果后崩溃了。(Windows告诉我Python停止了工作,所以可能在引擎盖下发生了一个SegFault。)mean
与{
回想起来,这个错误非常明显,与实现的numpy部分无关,而是与Python对象的初始化有关。值得称赞的是@hpaulj的评论,这让我走上了正确的道路。在
x.mean
和{np.core._methods.mean
,其中崩溃发生在行中这是一个冗余类型转换(至少在我的例子中),它相当于
^{pr2}$换句话说,调用
Dual
构造函数时使用Dual
的实例作为参数。但是,构造函数的实现需要两个双精度参数:当试图强制将
Dual
强制转换为double
时,PyArg_ParseTupleAndKeywords
崩溃。这是另一个需要研究的问题,但是最初的问题是通过在构造函数中实现相关的转换来解决的。在也许这是一个愚蠢的观察,但是你试过:
According to the documentation:
相关问题 更多 >
编程相关推荐