什么是Python中Matlab/Octave单类型转换函数的等价物



我已经从套接字接收到数据。在Matlab中,该数据通过以下函数转换为单精度

data_cal_rx = typecast(data_tcp2, "single");

现在我想在Python中拥有相同的函数。从谷歌和堆栈溢出中搜索,我发现Python中的单个精度是numpy.float32。所以我用以下函数代替:

import numpy as np
data_cal_rx = np.float32(data_tcp2)

Matlab中的data_tcp2是一个整数数组,具有:类:uint8尺寸:1x70848

然而,当我通过Python中的套接字接收到data_tcp2时,它显示为:

\x00\x00C\x00 QE\x0\x04E\x00'E\x00BE\x00D\x0\x00LE\x0\x00\x10*E\x00`\x00@D\x00\x10+\x0\x00C\x000I\x0\x00A\x0\x16\x0\x13\x00…

我从python中的终端得到了这个错误:

ValueError: could not convert string to float:

python中的套接字可能有问题?任何帮助或想法都将不胜感激。

非常感谢

作为一个例子,让我们从32位浮点数组开始:

orig = np.arange(5, dtype=np.float32)

我们将把它转换成一个字节缓冲区:

data = orig.tobytes()

这显示为:

b'x00x00x00x00x00x00x80?x00x00x00@x00x00@@x00x00x80@'

注意;b";,这表示这是一个字节对象,而不是字符串。如果您的数据实际上是一个字符串,请参阅答案底部的。

现在我们已经有了包含数组中数据的字节缓冲区,我们可以使用将其转换回32位浮点值的数组

out = np.frombuffer(data, dtype=np.float32)

(out现在与orig相同(。


如果data是字符串,则需要首先将其强制转换为字节缓冲区,这可以通过来实现

data = bytes(data, 'latin1')

";CCD_ 4";部分是编码。当从字符串转换为字节时,这种编码似乎不会更改任何数据。

相关内容

  • 没有找到相关文章

最新更新