2012-12-06 51 views
2

numpy的版本:1.6.2個人NumPy的類型似乎並沒有保留字節序

有人可以解釋爲什麼一個陣列的各個標量不保持字節序的D型設置?我如何讓他們輸出正確的字節順序?

>>> numpy_type1 = numpy.uint32 
>>> numpy_type2 = numpy.dtype(numpy_type1).newbyteorder('>') 
>>> hexdump(numpy.array([100000000], dtype = numpy_type1).tostring()) 
'00e1f505' # OKAY (endianness of host platform) 
>>> hexdump(numpy.array([100000000], dtype = numpy_type2).tostring()) 
'05f5e100' # OKAY (byte swap is visible) 
>>> hexdump(numpy.array([100000000], dtype = numpy_type1)[0].tostring()) 
'00e1f505' # OKAY (endianness of host platform) 
>>> hexdump(numpy.array([100000000], dtype = numpy_type2)[0].tostring()) 
'00e1f505' # FAIL (no byte swapping seen) 
>>> hexdump(numpy_type1(100000000).tostring()) 
'00e1f505' # OKAY (endianness of host platform) 
>>> hexdump(numpy_type2.type(100000000).tostring()) 
'00e1f505' # FAIL (no byte swapping seen) 

在上面的示例中,注意恰當時的toString被稱爲numpy的陣列上進行的該字節交換,但在陣列的標量元素錯誤地執行?簡而言之,我只需要一些方法來實例化dtype中的值,並以正確的字節順序獲取二進制字符串。我不能使用Python結構,因爲它不支持float16,float128或Numpy所做的其他外來數字類型。我寧願不手動進行字節交換。

我很想看到這項工作:

>>> hexdump(numpy_type2.type(100000000).tostring()) 
'05f5e100' # OKAY (byte swapping seen) 
+0

您是否將二進制字符串寫入可能在另一臺機器上讀取的文件?如果是這樣,也許hdf5將解決您的問題,因爲它透明地轉換字節序。 – DaveP

回答

1

對於單值你可能只是以及使用struct包。標量在簡單性方面根本沒有numpy(總是系統)的永恆性。但是,你也可以使用一個0-d數組來保存字節數。但對於大多數結果,numpy會將0-d數組轉換爲標量,因爲它們通常是您想要的。

既然你說你不能使用struct,即使它有點難看,你也可以使用np.array(scalar, dtype=original.dtype).tostring()

相關問題