繁体   English   中英

为什么在我进行位屏蔽后numpy.int16变成numpy.float64?

[英]Why numpy.int16 becomes numpy.float64 after I bit masking?

我正在尝试位屏蔽并丢弃我的data []的LSB,它是一个包含int16的numpy.ndarray。 data = [2,0,4,......,-2,-4]因此,我创建了一个新数组,并使用-2位屏蔽,就16位二进制而言,它应为1111111111111110。

data_new = np.zeros(len(data))
for i in range(len(data)):
    data_new[i] = np.int16(data[i] & -2) 

不知何故,输出不是int16的数组。 它变为numpy.float64。 而且python不允许我按位执行OR来重写LSB。

TypeError: unsupported operand type(s) for |: 'numpy.float64' and 'int'
>>type(data[0])
numpy.int16
>>type(data_new[0])
numpy.float64

dtype通过返回的数组的numpy.zeros默认为float64 如果要使用其他类型,则可以显式传递dtype ,例如:

data_new = np.zeros(len(data), np.int16)

或者,如果data已经是正确的大小和dtype ,使用np.zeros_like复制其格式和结构:

data_new = np.zeros_like(data)

请注意,在这种特定情况下,正确的解决方案可能只是让numpy隐式地通过替换数组的创建并循环以仅填充它来进行屏蔽和新数组的创建:

data_new = data & -2

它将运行更快,并且“可以正常工作”(它的大小和dtype自动与data相同)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM