numpy 版本:1.6.2
有人可以解释为什么数组的单个标量不保持 dtype 中设置的字节序吗?如何让它们以正确的字节顺序输出?
>>> 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)
在上面的示例中,请注意当在 numpy 数组上调用 tostring 时正确执行了字节交换,但在数组的标量元素上执行不正确?
简而言之,我只需要一些方法来实例化 dtype 中的值并以正确的字节顺序获取二进制字符串。我不能使用 Python 结构,因为它不支持 Numpy 支持的 float16、float128 或其他奇异数字类型。我宁愿不手动进行字节交换。
我很想看到这项工作:
>>> hexdump(numpy_type2.type(100000000).tostring())
'05f5e100' # OKAY (byte swapping seen)