2014-01-17 93 views
1

我使用oct2py来用python运行八度函数。 它正在工作,但当我尝试乘以2矩阵时出现错误。 我能做些什么来解决这个问题?与oct2py的矩阵乘法

这是一个样本MATLAB funcion

%% MATLAB 
function lol = jk2(arg1,arg2) 
    arg1 = arg1; 
    arg2 = arg2; 
    lol = arg1*arg2; 

end 

这是代码调用函数

import oct2py 
from oct2py import octave 
a=3 
b=4 
octave.call("/MATLAB/jk2.m",a,b) # this call works 
a=np.array([[1,2],[3,4]]) 
b=np.array([[5,6],[1,2]]) 
octave.call("/MATLAB/jk2.m",a,b) # this call report an errors 

这是错误消息

>>> octave.call("/home/donbeo/Documents/MATLAB/jk2.m",a,b) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/oct2py-1.2.0-py2.7.egg/oct2py/session.py", line 210, in call 
    resp = self._eval(cmd, verbose=verbose) 
    File "/usr/local/lib/python2.7/dist-packages/oct2py-1.2.0-py2.7.egg/oct2py/session.py", line 350, in _eval 
    return self._session.evaluate(cmds, verbose, log, self.logger) 
    File "/usr/local/lib/python2.7/dist-packages/oct2py-1.2.0-py2.7.egg/oct2py/session.py", line 523, in evaluate 
    raise Oct2PyError(msg) 
oct2py.utils.Oct2PyError: Oct2Py tried to run: 
""" 
[a__] = jk2(A__, B__) 
""" 
Octave returned: 
binary operator '*' not implemented for 'int64 matrix' by 'int64 matrix' operations 
>>> 
+0

我爱这里的变量名:) – portforwardpodcast

回答

2

下面是其中一个例子Python和Octave之间的界限变得模糊。 Numpy将数组解释为整数类型(因为没有明确的浮点数),但Octave会将数组视为双精度。如果你在数组定义中的任何地方添加一个句点,它将全部工作。

固定(测试)例如:

from oct2py import octave 
import numpy as np 
a = np.array([[1, 2], [3, 4.]]) # notice the addition of the period 
b = np.array([[5, 6], [1, 2], dtype=float]) # another way to specify floating point type 
octave.call("/MATLAB/jk2.m", a, b) # this call works just fine 
+0

由于它工作得很好。在一个更复杂的例子中,我不得不将一个单值作为float来传递。例如3.而不是3 – Donbeo