NumPy参考 >NumPy C-API > 数据类型API
标准数组可以具有24种不同的数据类型(并支持添加自己的类型)。这些数据类型都有一个枚举类型,一个枚举类型字符和一个对应的数组标量Python类型对象(放置在层次结构中)。还有一些标准的C typedef,可以更轻松地操作给定数据类型的元素。对于数字类型,还有等效于C的位宽C typedef和命名的typenumbers,它们使选择所需的精度更加容易。
警告
c代码中类型的名称更紧密地遵循c命名约定。这些类型的Python名称遵循Python约定。因此,NPY_FLOAT
在C语言中使用32位浮点数,但numpy.float_
在Python中对应于64位double。为了清楚起见,可以在Python和C中使用位宽名称。
NPY_TYPES
¶定义了一系列枚举类型,提供了24种基本数据类型以及一些有用的通用名称。每当代码需要类型编号时,就会要求使用这些枚举类型之一。这些类型都称为NPY_{NAME}
:
NPY_BOOL
¶布尔类型的枚举值,存储为一个字节。只能将其设置为值0和1。
NPY_BYTE
¶NPY_INT8
¶8位/ 1字节有符号整数的枚举值。
NPY_SHORT
¶NPY_INT16
¶16位/ 2字节有符号整数的枚举值。
NPY_INT
¶NPY_INT32
¶32位/ 4字节带符号整数的枚举值。
NPY_LONG
¶等效于NPY_INT或NPY_LONGLONG,具体取决于平台。
NPY_LONGLONG
¶NPY_INT64
¶64位/ 8字节有符号整数的枚举值。
NPY_UBYTE
¶NPY_UINT8
¶8位/ 1字节无符号整数的枚举值。
NPY_USHORT
¶NPY_UINT16
¶16位/ 2字节无符号整数的枚举值。
NPY_UINT
¶NPY_UINT32
¶32位/ 4字节无符号整数的枚举值。
NPY_ULONG
¶等同于NPY_UINT或NPY_ULONGLONG,具体取决于平台。
NPY_ULONGLONG
¶NPY_UINT64
¶64位/ 8字节无符号整数的枚举值。
NPY_HALF
¶NPY_FLOAT16
¶16位/ 2字节IEEE 754-2008兼容浮点类型的枚举值。
NPY_FLOAT
¶NPY_FLOAT32
¶32位/ 4字节IEEE 754兼容浮点类型的枚举值。
NPY_DOUBLE
¶NPY_FLOAT64
¶64位/ 8字节IEEE 754兼容浮点类型的枚举值。
NPY_LONGDOUBLE
¶特定于平台的浮点类型的枚举值至少与NPY_DOUBLE一样大,但在许多平台上更大。
NPY_CFLOAT
¶NPY_COMPLEX64
¶由两个NPY_FLOAT值组成的64位/ 8字节复数类型的枚举值。
NPY_CDOUBLE
¶NPY_COMPLEX128
¶由两个NPY_DOUBLE值组成的128位/ 16字节复杂类型的枚举值。
NPY_CLONGDOUBLE
¶特定于平台的复杂浮点类型的枚举值,由两个NPY_LONGDOUBLE值组成。
NPY_DATETIME
¶数据类型的枚举值,该数据类型根据可选的日期或时间单位精确地保存日期或日期时间。
NPY_TIMEDELTA
¶数据类型的枚举值,其中包含以可选日期或时间单位为整数的时间长度。
NPY_STRING
¶可选大小的ASCII字符串的枚举值。字符串在给定数组中具有固定的最大大小。
NPY_UNICODE
¶可选大小的UCS4字符串的枚举值。字符串在给定数组中具有固定的最大大小。
NPY_OBJECT
¶引用任意Python对象的枚举值。
NPY_VOID
¶主要用于保存struct dtype,但可以包含任意二进制数据。
上述类型的一些有用的别名是
NPY_INTP
¶有符号整数类型的枚举值,其大小与(void *)指针相同。这是所有索引数组使用的类型。
NPY_UINTP
¶无符号整数类型的枚举值,其大小与(void *)指针相同。
NPY_MASK
¶用于掩码的类型的枚举值,例如带有NPY_ITER_ARRAYMASK
迭代器标志的枚举值。这等效于NPY_UINT8
。
NPY_DEFAULT_TYPE
¶当未明确指定dtype时(例如,在调用np.zero(shape)时)使用的默认类型。这等效于
NPY_DOUBLE
。
其他有用的相关常量是
NPY_NTYPES
¶内置NumPy类型的总数。枚举范围从0到NPY_NTYPES-1。
NPY_NOTYPE
¶信号值保证不是有效的类型枚举数。
NPY_USERDEF
¶用于自定义数据类型的类型编号的开头。
指示某些类型的各种字符代码也是枚举列表的一部分。对类型字符的引用(应该完全需要)应始终使用这些枚举。它们的形式是可以在NPY_{NAME}LTR
哪里{NAME}
BOOL,BYTE,UBYTE,SHORT,USHORT,INT, UINT,LONG,ULONG,LONGLONG,ULONGLONG, HALF,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT, CDOUBLE,CLONGDOUBLE,DATETIME,TIMEDELTA, OBJECT,STRING,无效
INTP,UINTP
GENBOOL,签名,未签名的,浮动的,复杂
后一组{NAME}s
对应于数组接口类型字符串规范中使用的字母。
NPY_MAX_INT{bits}
NPY_MAX_UINT{bits}
NPY_MIN_INT{bits}
它们分别针对{bits}
= 8、16、32、64、128和256 进行定义,并提供相应(无符号)整数类型的最大值(最小值)。注意:实际的整数类型可能并非在所有平台上都可用(即,很少使用128位和256位整数)。
NPY_MIN_{type}
这是为{type}
= BYTE,SHORT,INT,
LONG,LONGLONG,INTP定义的
NPY_MAX_{type}
这是为以下所有定义的{type}
:BYTE,UBYTE,
SHORT,USHORT,INT,UINT,LONG,ULONG,
LONGLONG,ULONGLONG,INTP,UINTP
所有NPY_SIZEOF_{CTYPE}
常量都NPY_BITSOF_{CTYPE}
定义了相应的
常量。该NPY_BITSOF_{CTYPE}
常数提供的数据类型的位的数目。具体来说,可用的{CTYPE}s
是
BOOL,CHAR,SHORT,INT,LONG, LONGLONG,FLOAT,DOUBLE,LONGDOUBLE
所有数字数据类型(整数,浮点数和复数)都具有定义为特定枚举类型编号的常量。位宽类型所指的确切枚举类型取决于平台。特别地,可用的常数
PyArray_{NAME}{BITS}
,其中{NAME}
是INT,UINT,
FLOAT,COMPLEX和{BITS}
可以是8,16,32,64,80,96,128,160,192,256,和512显然不是所有比特宽度是可用在所有平台上适用于所有类型的数字类型。通常是8位,16位,32位,64位整数;32位,64位浮点数;以及64位,128位复杂类型。
常量NPY_INTP和NPY_UINTP引用枚举的整数类型,该类型足够大以将指针保持在平台上。索引数组应始终转换为NPY_INTP ,因为数组的维类型为npy_intp。
每个数字数据类型和bool数据类型都有标准变量类型。其中一些已在C规范中提供。您可以使用这些类型的扩展代码创建变量。
整数的无符号版本可以通过在整数名称的前面添加“ u”来定义。
npy_(u)byte
(无符号字符
npy_short
¶短
npy_ushort
¶无符号短
npy_uint
¶无符号整数
npy_int
¶整型
npy_int16
¶16位整数
npy_uint16
¶16位无符号整数
npy_int32
¶32位整数
npy_uint32
¶32位无符号整数
npy_int64
¶64位整数
npy_uint64
¶64位无符号整数
npy_(u)long
(无符号)long int
npy_(u)longlong
(无符号long long int)
npy_intp
¶Py_intptr_t(整数,是平台上指针的大小)。
npy_uintp
¶unsigned Py_intptr_t(一个整数,它是平台上指针的大小)。
npy_half
¶16位浮点数
npy_(c)float
32位浮点数
npy_(c)double
64位双精度
npy_(c)longdouble
长双
复杂类型与结构。真正的和.imag构件(按该顺序)。
对于带符号整数,无符号整数,浮点数和特定位宽的复杂浮点类型,也有typedef。可用的类型名称为
npy_int{bits}
,npy_uint{bits}
,npy_float{bits}
,和npy_complex{bits}
其中{bits}
是在类型的比特数目,并且可以是8,
16,32,64,128,和256为整数类型; 16,32
,64,80,96,128,和256对浮点类型; 和32,
64,128,160,192和512为复值的类型。哪些位宽可用取决于平台。加粗的位宽通常在所有平台上都可用。
为了帮助打印,以下字符串在printf和相关命令中定义为正确的格式说明符。
NPY_LONGLONG_FMT
,NPY_ULONGLONG_FMT
,NPY_INTP_FMT
,NPY_UINTP_FMT
,NPY_LONGDOUBLE_FMT