Numpy如何推断数组的dtype



谁能帮我理解Numpy的数组函数从哪里推断数据类型?

我理解它基本上是从分配给数组的值的类型来推断的。

例如:

> data = [1,2,3,4]
> arr = np.array(data)

所以在上面的行中,"arr"将包含dtype('int64')dtype('int32')

我想了解的是它是如何决定是否给它一个int64int32的?

我知道这可能是一个微不足道的问题,但我只是想了解它是如何工作的,因为我最近在一次采访中被问到这个问题。

数值数据类型包括整数和浮点数。

如果我们有一个同时包含integersfloating point numbers的数组,numpy会将整个数组赋值给float数据类型,这样小数点就不会丢失。

整数不能有小数点。例如,2.55将存储为2

正如@unutbu提到的int32int64取决于您拥有的位机类型,是32位机还是64位机

Strings,是包含numbers和/或characters的值。例如,字符串可以是一个单词、一个句子或几个句子。如果你的数组有混合类型(数字和字符串),最通用的dtype=string将被分配给你的数组。

要获得完整的详细信息,您可以查看scipy docs

的网站

根据文档,

某些类型,如int和intp,有不同的位大小,这取决于平台(例如32位机器和64位机器)。

因此,在32位机器上,np.array([1,2,3,4])返回d类型为int32的数组,但在64位机器上,它返回d类型为int64的数组。

在Python3(和基本的32位机器)中,int32 v int64取决于输入

的大小。
In [447]: np.array(123456789)
Out[447]: array(123456789)
In [448]: _.dtype
Out[448]: dtype('int32')
In [449]: np.array(12345678901234)
Out[449]: array(12345678901234, dtype=int64)

From np.array docs:

dtype:数组所需的数据类型。如果没有给出,那么型号将根据所需的最小型号确定保存序列中的对象。这个论点只能用于"上转换"数组。

看起来int32是最小的默认int大小(至少在我的配置中)。也是np.int_的值。

作为一个不允许的向下转换的例子:

In [456]: np.array(12345678901234, dtype=np.int32)
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)
<ipython-input-456-da7c96e4b0b3> in <module>()
----> 1 np.array(12345678901234, dtype=np.int32)
OverflowError: Python int too large to convert to C long

我认为存在某种分层处理,它使用最保守但又包罗万象的类型,可以"合法"地表示输入。如果你只有整数,你将使用int32/64保留所有的元素。一旦引入浮点数,就需要使用float32/64来保留数组的所有元素,并且始终可以将float反转换为int。一旦引入了字符串,就需要使用字符串来合法地表示数组中的所有内容,而且,如果需要

,总是可以反转换为floatint

,

>>> array([1]).dtype
dtype('int64')
>>> array([1, 2.0]).dtype
dtype('float64')
>>> array([1, 2.0, 'a']).dtype
dtype('S3')

简而言之,这是相当聪明的;)

相关内容

  • 没有找到相关文章

最新更新