MATLAB的getByteStreamFromArray / getArrayFromByteStream的Python实现

时间:2016-08-03 11:17:12

标签: python database matlab serialization

我正在开发一个应用程序,其数据必须可以通过数据库中的表从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

1 个答案:

答案 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