【问题标题】:what is the difference between int16 and in32 dtypeint16 和 in32 dtype 有什么区别
【发布时间】:2017-05-06 05:31:40
【问题描述】:

必需: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

有人能解释一下发生了什么吗 g 将 dtype 转换为“int32”。我一直认为'int16'到'int32'意味着分配的位数会改变,但显然我不明白

【问题讨论】:

  • 为什么这个问题被评为-1?
  • 可能是因为这个问题的研究工作很少,而且措辞不佳

标签: python numpy ipython


【解决方案1】:

正如您所说,它是用于表示每个整数的位数,但请考虑当您尝试将 10 个int16 字打印为int32 字时会发生什么。每个int32 单词将由两个int16 单词组成。因此,如您所见,将只有 5 个int32words。

此外,32 位整数中的字节顺序是这样的,第一个 16 位字将是 LSB 位。因此,查看您的两个第一个单词的十六进制表示。在 16 位中,它们是:0x0000 = 00x0001 = 1。当在 32 位字中使用相同的位时,由于这种有点不直观的位顺序,您会得到 0x0001 0000 = 65536

我希望这有助于您理解这些概念。

【讨论】:

  • 并且直到数组a的第一个元素前面的空格;这与 numpys 表示数组的方式有关。不管你是像上面那样创建你的数组,还是像a = np.array([65536, 196610, 327684, 458758, 589832])这样普通的方式。
  • 谢谢。为什么空间呢?我不明白创建这样的 dtype 更改流的目的可能是什么。假设每个移位 16 位并用 0 填充
【解决方案2】:

参考:Array types 在 Numpy 中和根据 ndarray.view doc

a.view(dtype=some_dtype) 用不同的数据类型构造数组内存的视图。这可能会导致重新解释内存字节。

  1. 考虑b = np.arange(10, dtype = 'int16')
    它会生成一个从 0 到 9 的均匀间隔数组。[0 1 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]

  2. 考虑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 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 0 0 0 7 0 0 0 8 0 0 0 9 0 0 0]

【讨论】:

  • 非常感谢。一次更正可能......你的意思是 2.2 32/8 = 4 部分?
  • @Nitin,希望我的回答能解决您的问题。请记住,您始终可以接受您认为有帮助的答案。
  • 感谢您清晰而中肯的回答,但 JohanL 在您面前的回答中已经很好地解决了我的每一个问题。所以我接受他的回答
  • 是的,无论他们何时发布答案,您都必须接受解决您问题的答案。好的答案可能需要一些额外的研究时间,所以快速发布不应该是接受的标准:)
  • 明白了。我是 stackoverflow 的新手,我会牢记这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2021-11-01
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
相关资源
最近更新 更多