原文:https://docs.scipy.org/doc/numpy/reference/c-api.dtype.html
校对:(虚位以待)
标准数组可以有24种不同的数据类型(并且有一些支持添加自己的类型)。这些数据类型都具有枚举类型,枚举类型字符和对应的数组标量Python类型对象(放置在层次结构中)。还有标准的C typedef,以便更容易操作给定数据类型的元素。对于数字类型,还有位宽等价的C typedef和命名的typenumbers,使得更容易选择所需的精度。
警告
c代码中的类型的名称更紧密地遵循c命名约定。这些类型的Python名称遵循Python约定。因此,NPY_FLOAT
在C中拾取一个32位的浮点数,但Python中的numpy.float_
对应于64位双精度浮点数。为了清楚起见,位宽名称可以在Python和C中使用。
有一个定义的枚举类型列表提供基本的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 dtypes,但可以包含任意二进制数据。
上述类型的一些有用的别名是
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, VOID
INTP,UINTP
GENBOOL,签署,UNSIGNED,浮动,COMPLEX
后一组{NAME}s
对应于数组接口typestring规范中使用的字母。
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,短,INT,LONG ,LONGLONG,INTP
NPY_MAX_ {type}
This is defined for all defined for {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。
每个数值数据类型和布尔数据类型都有标准变量类型。其中一些已经在C规范中可用。你可以在这些类型的扩展代码中创建变量。
整数的无符号版本可以通过在整数名称的前面预先挂起一个'u'来定义。
npy_(u)byte
(无符号字符
npy_(u)short
(无符号)短
npy_(u)int
(unsigned)int
npy_(u)long
(unsigned)long int
npy_(u)longlong
(unsigned long long int)
npy_(u)intp
(unsigned)Py_intptr_t(一个整数,它是平台上指针的大小)。
npy_(c)float
浮动
npy_(c)double
双
npy_(c)longdouble
长双
复杂类型是具有.real和.imag成员(按此顺序)的结构。
还有有符号整数,无符号整数,浮点和特定位宽的复杂浮点类型的typedef。可用的类型名称为
npy_int{bits}
,npy_uint{bits}
,npy_float{bits}
和npy_complex{bits}
where {bits}
is the number of bits in the type and can be 8, 16, 32, 64, 128, and 256 for integer types; 16, 32 , 64, 80, 96, 128, and 256 for floating-point types; and 32, 64, 128, 160, 192, and 512 for complex-valued types. 哪些位宽可用取决于平台。粗体的位宽通常在所有平台上可用。
有关打印的帮助,以下字符串被定义为printf和相关命令中的正确格式说明符。
NPY_LONGLONG_FMT
,NPY_ULONGLONG_FMT
,NPY_INTP_FMT
,NPY_UINTP_FMT
,NPY_LONGDOUBLE_FMT