Data Type API

原文:https://docs.scipy.org/doc/numpy/reference/c-api.dtype.html

译者:飞龙 UsyiyiCN

校对:(虚位以待)

标准数组可以有24种不同的数据类型(并且有一些支持添加自己的类型)。这些数据类型都具有枚举类型,枚举类型字符和对应的数组标量Python类型对象(放置在层次结构中)。还有标准的C typedef,以便更容易操作给定数据类型的元素。对于数字类型,还有位宽等价的C typedef和命名的typenumbers,使得更容易选择所需的精度。

警告

c代码中的类型的名称更紧密地遵循c命名约定。这些类型的Python名称遵循Python约定。因此,NPY_FLOAT在C中拾取一个32位的浮点数,但Python中的numpy.float_对应于64位双精度浮点数。为了清楚起见,位宽名称可以在Python和C中使用。

Enumerated 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 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

INTPUINTP

GENBOOL签署UNSIGNED浮动COMPLEX

后一组{NAME}s对应于数组接口typestring规范中使用的字母。

Defines

Max and min values for integers

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} = BYTEINTLONGLONGLONGINTP

NPY_MAX_ {type}

This is defined for all defined for {type} = BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, INTP, UINTP

Number of bits in data types

所有NPY_SIZEOF_{CTYPE}常数都定义了相应的NPY_BITSOF_{CTYPE}常量。NPY_BITSOF_{CTYPE}常量提供数据类型中的位数。具体来说,可用的{CTYPE}s

BOOLCHARSHORTINTLONGLONGLONG ,FLOATDOUBLELONGDOUBLE

Bit-width references to enumerated typenums

所有数字数据类型(整数,浮点和复数)都具有定义为特定枚举类型编号的常量。位宽度类型所指的枚举类型正好是平台相关的。特别是,可用的常数为PyArray_{NAME}{BITS}其中{NAME}INTUINTFLOATCOMPLEX{BITS}可以是8,16,32,64,80,96,128,160,192,256 ,512。显然,并非所有位宽都适用于所有类型的数字类型的所有平台。通常为8位,16位,32位,64位整数; 32位,64位浮点数;和64位,128位复杂类型。

Integer that can hold a pointer

常量NPY_INTPNPY_UINTP是指足够大以在平台上保存指针的枚举整数类型。索引数组应始终转换为NPY_INTP,因为数组的维的类型为npy_intp。

C-type names

每个数值数据类型和布尔数据类型都有标准变量类型。其中一些已经在C规范中可用。你可以在这些类型的扩展代码中创建变量。

Boolean

npy_bool

无符号字符;还定义常数NPY_FALSENPY_TRUE

(Un)Signed Integer

整数的无符号版本可以通过在整数名称的前面预先挂起一个'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(一个整数,它是平台上指针的大小)。

(Complex) Floating point

npy_(c)float

浮动

npy_(c)double

npy_(c)longdouble

长双

复杂类型是具有.real.imag成员(按此顺序)的结构。

Bit-width names

还有有符号整数,无符号整数,浮点和特定位宽的复杂浮点类型的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 Formatting

有关打印的帮助,以下字符串被定义为printf和相关命令中的正确格式说明符。

NPY_LONGLONG_FMTNPY_ULONGLONG_FMTNPY_INTP_FMTNPY_UINTP_FMTNPY_LONGDOUBLE_FMT