Numpy如何推断数组

时间:2015-08-09 19:12:53

标签: python arrays numpy multidimensional-array int

任何人都可以帮助我理解Numpy的数组功能从何处推断出数据类型。

我理解它基本上是从分配给数组的那种值中推断出来的。

例如:

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

因此,在上面的行中,“arr”将包含dtype('int64')dtype('int32')

我想了解的是,它是如何决定是给它int64还是int32

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

4 个答案:

答案 0 :(得分:3)

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

如果我们的数组包含integersfloating point numbersnumpy会将整个数组分配给float数据类型,因此小数点不会丢失。

整数永远不会有小数点。因此,例如,2.55将存储为2

正如@unutbu int32int64所提到的,取决于您拥有的位机类型,无论是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。一旦引入字符串,您需要使用字符串合法地表示数组中的所有内容,如果需要,您可以再次转发回floatint

例如:

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

简而言之,它非常聪明;)