Oct2py二元运算符'*'未实现

时间:2017-04-26 17:20:30

标签: python matlab python-2.7 octave oct2py

我正在使用oct2py从python执行八度函数,我收到以下错误:

  

oct2PyError:Octave评估错误:错误:二元运算符'*'不是   通过'复杂矩阵'操作实现'int64标量'

在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 个答案:

答案 0 :(得分:1)

<强> TL; DR:

g

<强>解释

您正在尝试将复杂矩阵与 int64 类型相乘。 显然,在八度音程中没有为这种类型定义乘法运算;它只为双打定义。

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

所以这不是一个具体的oct2py问题。请确保在与八度函数中的复数矩阵相乘之前将>> int64(5) * [1 + 1i] error: binary operator '*' not implemented for 'int64 scalar' by 'complex scalar' operations >> double(5) * [1 + 1i] ans = 5 + 5i 转换为OSF

至于为什么你首先得到一个复数的乘法,我怀疑interpft函数采用乘法的结果并将复数矩阵乘以某处。在八度音程中,事实证明,将int64与double相乘会得到一个int64:

double