2017-04-26 147 views
0

我使用oct2py执行从蟒蛇的倍频功能,我得到以下错误:Oct2py二元运算符“*”没有实现

oct2PyError: Octave evaluation error: error: binary operator '*' not implemented for 'int64 scalar' by 'complex matrix' operations

在Python中,我只是调用函数:

from oct2py import octave 
results = octave.myOctaveFunction(parameters) 

在myOctaveFunction的调试,我认为错误是在代码:

slc=interpft(slc, OSF*lines, 1); 

其中:

编辑:详细回溯:

回溯(最近最后调用):

File "/home/ezaqui/Papyrus/plugins/org.python.pydev_5.1.2.201606231256/pysrc/_pydevd_bundle/pydevd_exec.py", line 3, in Exec 
    exec exp in global_vars, local_vars 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/oct2py/dynamic.py", line 96, in __call__ 
    return self._ref().feval(self.name, *inputs, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/oct2py/core.py", line 369, in feval 
    store_as=store_as, plot_dir=plot_dir) 
    File "/usr/local/lib/python2.7/dist-packages/oct2py/core.py", line 568, in _feval 
    raise Oct2PyError(msg) 
Oct2PyError: Octave evaluation error: 
error: binary operator '*' not implemented for 'int64 scalar' by 'complex matrix' operations 
+1

你的错误说你是一个复杂的矩阵乘以一个标量,但是,在你该行的描述,唯一的东西越来越乘以两个标量。我猜想或者这不是违规行,或者“行”实际上并不是标量。 – FamousJameous

+0

我认为乘法是在interpft函数内完成的。代码崩溃之前,该行 – eduardosufan

+0

您是否收到追溯或只是您发布的错误? – FamousJameous

回答

1

TL; DR:

slc=interpft(slc, double(OSF*lines), 1); 

说明:

您试图乘以复矩阵与Int64的类型。 显然乘法操作没有为这种类型的倍频程序定义;它只为双打定义。

>> int64(5) * [1 + 1i] 
error: binary operator '*' not implemented for 'int64 scalar' by 'complex scalar' operations 

>> double(5) * [1 + 1i] 
ans = 5 + 5i 

所以这不是一个oct2py问题。只需确保OSF转换为double,然后再乘以八度函数中的复数矩阵。

至于为什么你首先得到一个复数的乘法,我怀疑interpft函数将乘法的结果乘以一个复数矩阵。在八度,事实证明,一个Int64在一个Int64双重结果相乘:

>> class(int64(5) * double(5)) 
ans = int64