我正在开发一个应用程序,其数据必须可以通过数据库中的表从Python和MATLAB访问。数据是一个包含matlab数组的结构。
data.sift1 = linspace(-5,5,7)
data.sift2 = linspace(-2,8,7)`
MATLAB中数据存储方法的当前实现:
保存:序列化
bs = getByteStreamFromArray(data);
whos bs
% Name: bs Size: 47944x1 Bytes: 47944 Class: uint8
sth.setBytes(1, bs); % sth = database handle
sth.execute;`
正在加载:反序列化
sifts = exec(conn, 'SELECT sifts FROM data LIMIT 1'); % conn = dbconnection instance
siftsmat = typecast(cell2mat(sifts), 'uint8')
% Name: siftsmat Size: 47944x1 Bytes: 47944 Class: uint8
data = getArrayFromByteStream(siftsmat)
% data = sift1: [...] sift2: [...]
在python中,
正在加载:反序列化
sifts = conn.select('SELECT sifts FROM data LIMIT 1')
% <read-only buffer for 0x7f175a479a10, size 47944, offset 0 at 0x7f174ce31c70>
b = bytearray(sifts)
siftsmat = struct.unpack('B'*len(b), b)
data = ???`
保存:序列化
???
我想知道在MATLAB中python中是否有等同于getByteStreamFromArray/getArrayFromByteStream的内容,以便我可以使用python读取MATLAB编写的data
。
答案 0 :(得分:0)
我一直在寻找相同的东西。使用适用于Python的MATLAB引擎,您可以让MATLAB进行转换,但这可能并不是您想要的。这将需要在运行Python代码的同一台计算机上使用(许可的)MATLAB。
现在对于我的用例来说还可以,但是我很快就会研究替代方法;-)
所以我现在要做的是,从Python启动MATLAB引擎,然后在Bytestream上从MATLAB调用getArrayFromByteStream,然后将其转换为NumPy数组:
import numpy as np
import matlab.engine
#
# some code that gives you myByteStream
#
eng = matlab.engine.start_matlab()
myNativeArray = eng.getArrayFromByteStream(myByteStream)
myArray = np.array(myNativeArray)
有关此适用于Python的MATLAB引擎的更多信息:
https://www.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for-python.html