Python内置的基本数据类型,每个类别只有一种,比如只有一种整数int,只有一种浮点数float。对于不需要关心计算机如何存储数据的应用,只提供一种选择是非常方便的。但是对于科学计算而言,这是不够的,为了性能和精度往往需要根据具体场景控制更多的细节。为此,NumPy内置了多种基本标量类型。
一、数组标量
标量(scalar),与矢量相对,是只有大小,没有方向的量。
Numpy中有数种(一说是24,但貌似不对)不同类型的标量,数组标量与ndarray具有相同的属性和方法,不过这点貌似没什么卵用,如:
>>> import numpy as np
>>> np.int32.size
<attribute 'size' of 'numpy.generic' objects>
数组标量的层次结构图:
一些标量类型本质上等同于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的数组结构,一张图来看:
数据存储区域保存着数组中所有元素的二进制数据,dtype对象则知道如何将元素的二进制数据转换为可用的值。数组的维数、大小等信息都保存在ndarray数组对象的数据结构中。
数据类型对象是numpy.dtype类的实例,描述了如何解释对应的固定大小的内存块中的字节。它主要描述了数据的以下方面:
- 数据元素的类型(整型、浮点型、Python对象等)。
- 数据的大小(例如整数中有多少字节)。
- 数据的顺序(little-endian 或 big-endian)。
dtype 对象使用以下语法构造:numpy.dtype(obj [, align, copy]),参数obj是可被转换为数据类型对象的内容。如np.dtype(np.int32)。可以转换为数据类型对象的常见内容如下:
- dtype 本身
- None
NumPy中的默认数据类型是float_。
- Array-scalar 数组标量类型
np.dtype(np.int32)
- 几种python类型
在用于生成 dtype 对象时等效于相应的数组标量:int是指np.int_,bool意味着np.bool_,float是np.float_,complex是np.complex_,bytes是指np.bytes_,str指np.str_(python3),其它是np.object_。
- Generic types
根据以下关联转换为相应的类型对象:
character | string |
- 具有 .dtype 属性的任何对象
该属性必须返回可转换为dtype对象的内容。
- 单字符串类型代码
np.dtype('b')
- Array-protocol 字符串
np.dtype('f8')
三、结构化数据类型
用的不多,放个链接自己看看
https://numpy.org/devdocs/user/basics.rec.html
翻译参考: