任何人都可以帮助我理解Numpy的数组功能从何处推断出数据类型。
我理解它基本上是从分配给数组的那种值中推断出来的。
例如:
> data = [1,2,3,4]
> arr = np.array(data)
因此,在上面的行中,“arr”将包含dtype('int64')
或dtype('int32')
。
我想了解的是,它是如何决定是给它int64
还是int32
?
我知道这可能是一个微不足道的问题,但我只是想了解它是如何运作的,因为我最近在接受采访时被问到这一点。
答案 0 :(得分:3)
数字数据类型包括整数和浮点数。
如果我们的数组包含integers
和floating point numbers
,numpy
会将整个数组分配给float
数据类型,因此小数点不会丢失。
整数永远不会有小数点。因此,例如,2.55将存储为2
正如@unutbu int32
和int64
所提到的,取决于您拥有的位机类型,无论是32位机器还是64位机器
Strings
,是包含numbers
和/或characters
的值。例如,字符串可以是单词,句子或几个句子。如果您的数组具有混合类型(数字和字符串),则会将最常规的dtype=string
分配给您的数组。
要获得完整的详细信息,请查看this website of scipy docs
答案 1 :(得分:2)
每the docs,
某些类型(如int和intp)具有不同的位数,具体取决于平台(例如32位与64位计算机)。
因此,在32位计算机上,np.array([1,2,3,4])
返回一个dtype int32
数组,但在64位计算机上,它返回一个dtype int64
数组。
答案 2 :(得分:2)
在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)
来自np.array
文档:
dtype:数组所需的数据类型。如果没有给出,那么 该类型将被确定为所需的最小类型 按住序列中的对象。这个论点只能 习惯于向上' upcast'数组。
看起来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
答案 3 :(得分:0)
我认为存在某种层次化处理方式,它使用最保守但也包罗万象的类型,可以“合法地”代表输入。如果你只有整数,你将使用int32 / 64保留所有元素。只要引入浮点数,就需要使用float32 / 64来保留数组的所有元素,并且始终可以将float
反向转换为int
。一旦引入字符串,您需要使用字符串合法地表示数组中的所有内容,如果需要,您可以再次转发回float
或int
例如:
>>> array([1]).dtype
dtype('int64')
>>> array([1, 2.0]).dtype
dtype('float64')
>>> array([1, 2.0, 'a']).dtype
dtype('S3')
简而言之,它非常聪明;)