2014-01-17 94 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