Numpy数据类型对象与数组标量详解

Python内置的基本数据类型,每个类别只有一种,比如只有一种整数int,只有一种浮点数float。对于不需要关心计算机如何存储数据的应用,只提供一种选择是非常方便的。但是对于科学计算而言,这是不够的,为了性能和精度往往需要根据具体场景控制更多的细节。为此,NumPy内置了多种基本标量类型。

一、数组标量

标量(scalar),与矢量相对,是只有大小,没有方向的量。

Numpy中有数种(一说是24,但貌似不对)不同类型的标量,数组标量与ndarray具有相同的属性和方法,不过这点貌似没什么卵用,如:

>>> import numpy as np
>>> np.int32.size

数组标量的层次结构图:

Numpy数据类型对象与数组标量详解_第1张图片

一些标量类型本质上等同于Python的基本类型,因此和继承通用数组标量类型一样,也继承自python类型:

Array scalar type

Related Python type

Inherits?

int_

int

Python 2 only

float_

float

yes

complex_

complex

yes

bytes_

bytes

yes

str_

str

yes

bool_

bool

no

datetime64

datetime.datetime

no

timedelta64

datetime.timedelta

no

bool_ 数据类型与Python bool非常相似,但不能继承自它,因为Python的bool不允许自身被继承。

主要标量及其在win10 64位上的别名:

别名

标量

备注

np.bool8

np.bool_

 

np.string_

np.bytes_

字节字符串

np.int8

np.byte

 

np.int16

np.short

 

np.int32

(win10 64)

np.intc(与C int兼容)

np.int_(与Python2 int和C long兼容)

 

np.int64

(win10 64)

np.longlong(C long long)

 

np.float16

np.half

 

np.float32

np.single

 

np.float64

np.float_

np.double

 

np.unicode_

np.str_

unicode字符串

np.complex64

np.csingle

 

np.complex128

np.complex_

np.cfloat

np.cdouble

 

通过此条命令看所有标量类型:

>>> np.ScalarType # win10 64bit

输出:

(int,
 float,
 complex,
 int,
 bool,
 bytes,
 str,
 memoryview,
 numpy.uint32,
 numpy.int16,
 numpy.uint64,
 numpy.intc,
 numpy.int8,
 numpy.object_,
 numpy.float64,
 numpy.bool_,
 numpy.float32,
 numpy.datetime64,
 numpy.str_,
 numpy.complex64,
 numpy.uint16,
 numpy.bytes_,
 numpy.float16,
 numpy.clongdouble,
 numpy.int32,
 numpy.timedelta64,
 numpy.complex128,
 numpy.uintc,
 numpy.int64,
 numpy.void,
 numpy.longdouble,
 numpy.uint8)

注意,标量类型不是dtype对象,尽管在NumPy中只要需要数据类型规范,它就能被用于代替dtype对象。

二、Numpy数据类型对象

要探讨数据类型对象,需要先探讨Numpy的数组结构,一张图来看:

Numpy数据类型对象与数组标量详解_第2张图片

数据存储区域保存着数组中所有元素的二进制数据,dtype对象则知道如何将元素的二进制数据转换为可用的值。数组的维数、大小等信息都保存在ndarray数组对象的数据结构中。

数据类型对象是numpy.dtype类的实例,描述了如何解释对应的固定大小的内存块中的字节。它主要描述了数据的以下方面:

  1. 数据元素的类型(整型、浮点型、Python对象等)。
  2. 数据的大小(例如整数中有多少字节)。
  3. 数据的顺序(little-endian 或 big-endian)。

dtype 对象使用以下语法构造:numpy.dtype(obj [, align, copy]),参数obj是可被转换为数据类型对象的内容。如np.dtype(np.int32)。可以转换为数据类型对象的常见内容如下:

  • dtype 本身
  • None

Numpy数据类型对象与数组标量详解_第3张图片

NumPy中的默认数据类型是float_

  • Array-scalar 数组标量类型
np.dtype(np.int32)
  • 几种python类型

在用于生成 dtype 对象时等效于相应的数组标量:int是指np.int_bool意味着np.bool_floatnp.float_complexnp.complex_bytes是指np.bytes_strnp.str_(python3),其它是np.object_

  • Generic types

根据以下关联转换为相应的类型对​​象:

numberinexactfloating

float

complexfloating

cfloat

integersignedinteger

int_

unsignedinteger

uint

character

string

genericflexible

void

  • 具有 .dtype 属性的任何对象

该属性必须返回可转换为dtype对象的内容。

  • 单字符串类型代码

np.dtype('b')

  • Array-protocol 字符串

np.dtype('f8')

三、结构化数据类型

用的不多,放个链接自己看看

https://numpy.org/devdocs/user/basics.rec.html

翻译参考:

https://www.numpy.org.cn/user/basics/rec.html#%E7%BB%93%E6%9E%84%E5%8C%96%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B

你可能感兴趣的:(numpy,数据类型)