如何将numpy.array转换为二进制文件?

时间:2017-12-01 16:57:55

标签: python numpy binary

我在Python2.7中使用以下功能:

def array2int(pixels):
    out = 0
    for bit in pixels:
        out = (out << 1) | bit
    return out 

这通常有效,但如果我通过

v=np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
array2int(v.astype(int))

返回-262145

1 个答案:

答案 0 :(得分:3)

与Python不同,numpy默认使用固定大小的整数。那些可能会溢出:

1<<65
# 36893488147419103232 # correct
npone = np.ones([1], dtype=int)[0]
npone
# 1
type(npone)
# <class 'numpy.int64'>
npone<<65
# 2 # wrong

当添加或按位oring或者任何python int和numpy int时,numpy通常会获胜并且结果将是一个numpy int:

out = 1
type(out)
# <class 'int'>
out = (out << 1) | npone
type(out)
# <class 'numpy.int64'>

为了防止在您的功能中发生这种情况,您可以明确地将bit投射到正确的int

        out = (out << 1) | int(bit)