Python 防止插入int16类型ndarray的int8元素隐式转换
我有一个int16类型的numpy数组。我想输入一个仅包含int8类型元素的数组。我的做法如下:Python 防止插入int16类型ndarray的int8元素隐式转换,python,numpy,Python,Numpy,我有一个int16类型的numpy数组。我想输入一个仅包含int8类型元素的数组。我的做法如下: original_array = np.zeros((15,), dtype=np.int16) new_array = np.insert(original_array , 0, np.array(1).astype('int8')) 输出: new_array = array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=in
original_array = np.zeros((15,), dtype=np.int16)
new_array = np.insert(original_array , 0, np.array(1).astype('int8'))
输出:
new_array = array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int16)
>>> type(new_array [0])
<class 'numpy.int16'>
new_array=array([1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],dtype=int16)
>>>类型(新的_数组[0])
它会自动将int8转换为int16。有没有办法保留此元素的数据类型?您可以使用viewcasting进行此操作:
a16 = np.arange(15, dtype=np.int16)
b8 = np.array([4,19], dtype=np.int8)
ab8 = np.r_[b8, a16.view(np.int8)]
# verify
np.alltrue(a16 == ab8.view(np.int16)[1:])
解释为什么要执行此操作阵列的元素将由另一个应用程序读取,该应用程序将前两个8字节(16字节)作为一个单元并从中读取数据,随后的8个字节具有单独的数据。您正在从原始int16阵列创建新阵列。如果您从int8数组开始,它将起作用,但与您正在做的相反。那么numpy数组是用于此用途的错误结构。@AlessandroMariani是的,您是对的。我也这么想。只是想看看是否还有其他办法。@hpaulj它的现有实现,因此无法更改数据结构。我将把它转换成int8并相应地修改它。谢谢你的信息和帮助!