我有大量的numpy向量,每个向量的形状(3,)都有8位整数值:
vec = np.random.randint(2**8, size=3)
我想通过一些已知的缩减因子将这些矢量量化为更小的空间。我知道我可以在一系列操作中通过定义另一个带有定义信息丢失量的向量,将vec
除以该向量,然后将结果值转换回整数来解决这个问题:
>>> vec = np.random.randint(2**8, size=3)
>>> denominator = np.full(3, 8)
>>> divided = vec / denominator
>>> ints = divided.astype(int)
>>> ints *= denominator
>>>
>>> vec
array([205, 182, 99])
>>> ints
array([200, 176, 96])
有没有更快的方法来量化这些numpy向量?我非常感谢其他人可以就这个问题分享的任何想法。
答案 0 :(得分:3)
假设您的缩减系数是2的幂,您显示的操作相当于清除最后几位。这可以使用按位和运算符&
一步完成。您可以使用Python二进制文字0b11111000
或256 - denominator
直接指定位掩码。所以,感谢numpy广播你需要做的就是
vec & (256 - denominator)