Python int16和in32数据类型之间有什么区别

Python 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”时。我

必填项: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”时。我一直认为“十六进制”到“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级?可能是因为这个问题几乎没有研究成果,而且措辞也很糟糕