【问题标题】:Difference between dtype = np.int and int when creating array创建数组时dtype = np.int和int之间的区别
【发布时间】:2021-11-28 03:58:55
【问题描述】:

我对整数类型之间的区别感到困惑。

例如,这是一个numpy.array,dtype 为np.int

>>> arr_ = np.array([1,2], dtype = np.int)

通过下面的代码,它代表trueintnp.int相同:

>>> int is np.int
Out[1]: True

但是,当我选择使用 dtype 为 np.int 创建的数组的第一个值时,下面的代码输出 false

>>> type(arr_[0]) is int
Out[2]: False

为什么代码输出的是false,而不是true

dtype = np.int 似乎没有应用于arr_

为什么np.int 不作为数组的 dtype 应用?

我查看了this,但找不到我需要的东西。

【问题讨论】:

  • 你能添加type(arr_[0])返回的值吗?
  • @Mahrkeenerh 它返回numpy.int32,即使我设置了一个dtype np.int
  • 我不确定我是否理解您的要求。您链接的问题描述了int(或np.int,这是同一类型的另一个名称)在用作数组的dtype 时如何转换为np.int_。这解释了你所看到的行为。您还需要了解什么?
  • 作为dtype 传递的东西通常不会是从数组中检索到的元素的类型对象。毕竟dtype='int32'可以,字符串'int32'不能是type(anything)
  • 显示type(arr_[0])

标签: python numpy integer dtype


【解决方案1】:

在 Python 中,intnp.int32np.int64 类型是 3 种不同的类型:

  • int 是原生 Python 多精度整数类型,能够表示任何整数值(唯一的限制是可用内存)。例如2**128 是一个有效的int
  • np.int32int32_t 中的 C 整数类型,可以使用最多 32 位表示值,即介于 -2147483648 和 2147483647 之间的值
  • np.int64int64_t C 整数类型,最多可以使用 64 位表示值,即介于 -9223372036854775808 和 9223372036854775807 之间的值

np.int 是原生Python int 类型的(不推荐使用的别名),int is np.int 的原因是正确的。但是即使使用dtype=int,numpy 整数数组也会收到np.int32np.int64 的实际类型,因为它们必须由C 代码处理,因此它们必须强制转换为固定大小的整数类型。如果您确实需要存储真正的int 值,则必须使用dtype=object,但操作将不再可向量化。

【讨论】:

  • 请注意,这些都不是实际的 dtype。 dtypes 由numpy.dtype 对象而不是 Python 类型表示,因为 dtypes 和类型代表不同的东西。 dtype 的工作是表示字节顺序和结构化数组填充以及其他内存布局信息等内容,而 Python 类型对象的工作是表示有关继承层次结构以及如何调度方法和运算符的信息。
  • numpy.int32numpy.int64 是 Numpy 用于 int32 和 int64 dtype 的 array scalars 的类型。
猜你喜欢
  • 2014-03-18
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多