我從套接字接收到資料。在 Matlab 中,此資料通過以下函式轉換為單精度
data_cal_rx = typecast(data_tcp2, "single");
現在我想在 Python 中擁有相同的功能。從google和Stack Overflow搜索,我看到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\x00 \x04E\x00 'E\x00BE\x00D\x00\x00LE\x00\x00\x10*E\x00`\x00@D\x00\x10 \x00\x00C\ x000I\x00\x00A\x00\x16\x00\x13\x00 ...
我從 python 的終端收到了這個錯誤:
ValueError: could not convert string to float:
python中的socket可能有問題嗎?任何幫助或想法將不勝感激。
非常感謝
uj5u.com熱心網友回復:
例如,讓我們從 32 位浮點陣列開始:
orig = np.arange(5, dtype=np.float32)
我們將其轉換為位元組緩沖區:
data = orig.tobytes()
這顯示為:
b'\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
注意開頭的“b”,它表示這是一個位元組物件,而不是字串。如果您的資料實際上是一個字串,請參閱此答案的底部。
現在我們已經獲得了包含陣列中資料的位元組緩沖區,我們可以將其轉換回 32 位浮點值陣列:
out = np.frombuffer(data, dtype=np.float32)
(out現在等同于orig)。
如果data是字串,您需要先將其轉換為位元組緩沖區,您可以使用
data = bytes(data, 'latin1')
“ latin1”部分是編碼。從字串轉換為位元組時,這種編碼似乎不會改變任何資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/519537.html
