Python 用oct2py进行矩阵乘法
我使用oct2py在python中运行倍频程函数。 这是工作,但我得到一个错误,当我试图乘以2矩阵。 我能做些什么来解决这个问题 这是一个示例matlab函数Python 用oct2py进行矩阵乘法,python,matlab,octave,oct2py,Python,Matlab,Octave,Oct2py,我使用oct2py在python中运行倍频程函数。 这是工作,但我得到一个错误,当我试图乘以2矩阵。 我能做些什么来解决这个问题 这是一个示例matlab函数 %% 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
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
>>>
八度音程调用(“/home/donbeo/Documents/MATLAB/jk2.m”,a,b)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist packages/oct2py-1.2.0-py2.7.egg/oct2py/session.py”,第210行,调用中
resp=self.\u eval(cmd,verbose=verbose)
文件“/usr/local/lib/python2.7/dist-packages/oct2py-1.2.0-py2.7.egg/oct2py/session.py”,第350行,in_eval
返回self.\u session.evaluate(cmds、verbose、log、self.logger)
文件“/usr/local/lib/python2.7/dist packages/oct2py-1.2.0-py2.7.egg/oct2py/session.py”,第523行,在evaluate中
提高Oct2Yerror(msg)
oct2py.utils.Oct2pyer错误:oct2py尝试运行:
"""
[a_uuu]=jk2(a_uuu,B_uuu)
"""
八度返回:
未通过“int64矩阵”操作为“int64矩阵”实现二进制运算符“*”
>>>
下面是一个Python和倍频程之间的界限变得模糊的示例。Numpy将数组解释为整数类型(因为没有显式浮点),但Octave会将数组视为双精度数组。如果在数组定义中的任意位置添加句点,则所有句点都会起作用 固定(测试)示例:
谢谢,效果很好。在一个更复杂的例子中,我被迫将一个值也作为float传递。例3。我不喜欢这里的变量名:)
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