怎么把int16组转换成int8数组#python#。

在处理灰度图片时,读取了一个int16的数组,想把该数组转换成8位数组。
直接用np.int8() 是抛弃了二进制的前8位,与计算结果不符。
但是对数组做运算时出现了下面代码的问题

import numpy as np
a = np.array([32767,32765,1044,254],'int16')
print('方法1:')
b = (a*255)//32767
print(b)
print(b.dtype)

print('方法2:')
for i in range(len(a)):
    a[i] = a[i]*255//32767
print(a)

上面代码输出结果:

方法1:
[ 0  0  0 -1]
int16
方法2:
[255 254   8   1]

方法二的输出是正确的,但是图片数据很大,用for循环的方法太慢了,请问各位有我哪里出了错误吗?除了循环还有其他方法吗?

import numpy as np
a = np.array([32767,32765,1044,254],'int16')
print('方法1:')
b = ((a*255.0)//32767).astype(np.uint8)
print(b)
print(b.dtype)

这样就可以了