Python int16和in32数据类型之间有什么区别
必填项:numpyPython int16和in32数据类型之间有什么区别,python,numpy,ipython,Python,Numpy,Ipython,必填项:numpy b = np.arange(10, dtype = 'int16') print(b) #prints [0 1 2 3 4 5 6 7 8 9] a = b.view(dtype = 'int32') print(a) #prints [ 65536 196610 327684 458758 589832] #notice also the space before the first element 有人能解释一下发生了什么事吗 在将数据类型转换为“int32”时。我
b = np.arange(10, dtype = 'int16')
print(b) #prints [0 1 2 3 4 5 6 7 8 9]
a = b.view(dtype = 'int32')
print(a) #prints [ 65536 196610 327684 458758 589832] #notice also the space before the first element
有人能解释一下发生了什么事吗
在将数据类型转换为“int32”时。我一直认为“十六进制”到“32”意味着分配的位数会改变它,但显然我不理解它 < p>这是用来表示每个整数的位数,正如你所说的,但是想想当你尝试打印10个代码>每个
int32
单词将由两个int16
单词构建。因此,如您所见,只有5个int32
单词
此外,32位整数中的字节顺序是,第一个16位字将是LSB位。因此,看看你的前两个单词的十六进制表示法。在16位中,它们是:0x0000=0
和0x0001=1
。当在32位字中使用相同的位时,由于这种有点不直观的位顺序,您会得到0x0001 0000=65536
我希望这有助于您理解这些概念。Ref:in Numpy和as the ndarray.view
a、 视图(dtype=some_dtype)用不同的数据类型构造数组内存的视图。这可能会导致重新解释内存字节
b=np.arange(10,dtype='int16')
它将生成一个从0到9的等距阵列<代码>[01 2 3 4 5 6 7 8 9]
1.1将此数组视为
int32
,通过(32/16)=2
此外,尝试在奇数长度数组上执行此操作将导致错误
输出为
[65536 196610 327684 458758 589832]
说明:
[65536*1+0、65536*3+2、65536*5+4、65536*7+6、65536*9+8]
b=np.arange(10,dtype='int32')
它与
np.arange(10)
相等,后者只是创建了一个从0到9的等间距数组2.1将此数据视为
int16
将数据中的每个元素拆分为(32/16)=2个部分。
因此,a=b.view(dtype='int16')
是[0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0]
2.2将此数据视为int8
将数据中的每个元素拆分为(32/8)=4个部分。
因此,a=b.view(dtype='int8')
是[0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0]
以及数组第一个元素前面的空间
a
;这与numpys表示数组的方式有关。无论您是像上面那样创建数组,还是以普通方式创建数组([6553619661327684458758589832]),都没有关系。谢谢。为什么是太空呢?我不明白创建这样的数据类型更改流的目的是什么。人们会假设每一个都移动16位,并用0填充,非常感谢。也许一次更正。。在2.2 32/8=4部分中,你的意思是?@Nitin,我希望我的答案解决了你的问题。记住,你总是可以接受你认为有用的答案。谢谢你的清晰而中肯的回答,但是约翰在他给你的答案中已经很好地解决了我的每一个问题。所以我接受他的回答是的,你必须接受这个答案,不管他们什么时候发布他们的答案,这个答案解决了你的问题。好的答案可能需要额外的研究时间,所以快速发帖不应该成为接受的标准:)明白。我是stackoverflow的新手,我会记住这一点。为什么这个问题被评为-1级?可能是因为这个问题几乎没有研究成果,而且措辞也很糟糕