Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 防止插入int16类型ndarray的int8元素隐式转换_Python_Numpy - Fatal编程技术网

Python 防止插入int16类型ndarray的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

我有一个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=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并相应地修改它。谢谢你的信息和帮助!