NumPy参考 >NumPy C-API > 数组API
这些宏访问PyArrayObject
结构成员,并在中定义ndarraytypes.h
。输入参数arr可以是
可直接解释为的
任何参数(of
及其子类型的任何实例)。PyObject *
PyArrayObject *
PyArray_Type
PyArray_NDIM
(PyArrayObject * arr )¶数组中的维数。
PyArray_FLAGS
(PyArrayObject * arr )¶返回表示array-flags的整数。
PyArray_TYPE
(PyArrayObject * arr )¶返回此数组的元素的(内置)类型编号。
PyArray_SETITEM
(PyArrayObject * arr,void * itemptr,PyObject * obj )¶转换OBJ,并将其放置在ndarray,ARR,在地方指向itemptr。如果发生错误,则返回-1;如果成功,则返回0。
PyArray_ENABLEFLAGS
(PyArrayObject * arr,int 标志)¶1.7版中的新功能。
启用指定的数组标志。此函数不进行任何验证,并假定您知道自己在做什么。
PyArray_CLEARFLAGS
(PyArrayObject * arr,int 标志)¶1.7版中的新功能。
清除指定的数组标志。此函数不进行任何验证,并假定您知道自己在做什么。
PyArray_DATA
(PyArrayObject * arr )¶PyArray_BYTES
(PyArrayObject * arr )¶这两个宏是相似的,并获得指向数组数据缓冲区的指针。第一个宏可以(并且应该)分配给特定的指针,而第二个宏则用于通用处理。如果您不能保证连续和/或对齐的数组,请确保您了解如何访问数组中的数据以避免内存和/或对齐问题。
PyArray_DIMS
(PyArrayObject * arr )¶返回指向数组尺寸/形状的指针。元素的数量与数组的维数匹配。可以返回NULL
0维数组。
PyArray_SHAPE
(PyArrayObject * arr )¶1.7版中的新功能。
的同义词PyArray_DIMS
,命名为与shape
Python中的用法一致
。
PyArray_STRIDES
(PyArrayObject * arr )¶返回指向数组步幅的指针。元素的数量与数组的维数匹配。
PyArray_DIM
(PyArrayObject * arr,int n )[源代码)¶返回n 维中的形状。
PyArray_STRIDE
(PyArrayObject * arr,int n )[源代码)¶返回n 维的步幅。
PyArray_ITEMSIZE
(PyArrayObject * arr )¶返回此数组元素的项目大小。
请注意,在1.7版中弃用的旧API中,此函数的返回类型为int
。
PyArray_SIZE
(PyArrayObject * arr )¶返回数组的总大小(以元素数为单位)。
PyArray_Size
(PyArrayObject * obj )¶如果obj不是ndarray的子类,则返回0 。否则,返回数组中元素的总数。PyArray_SIZE
(obj)的安全版本。
PyArray_NBYTES
(PyArrayObject * arr )¶返回数组消耗的字节总数。
PyArray_BASE
(PyArrayObject * arr )¶这将返回数组的基础对象。在大多数情况下,这意味着拥有数组所指向的内存的对象。
如果要使用C API构造数组并指定自己的内存,则应使用该函数PyArray_SetBaseObject
将基设置为拥有内存的对象。
如果设置了(不赞成使用的)NPY_ARRAY_UPDATEIFCOPY
或
NPY_ARRAY_WRITEBACKIFCOPY
标志,则它具有不同的含义,即base是在复制分辨率下将当前数组复制到的数组。两个函数的基本属性的这种重载在将来的NumPy版本中可能会发生变化。
PyArray_DESCR
(PyArrayObject * arr )[源代码)¶返回对数组的dtype属性的借用引用。
PyArray_DTYPE
(PyArrayObject * arr )[源代码)¶1.7版中的新功能。
PyArray_DESCR的同义词,命名为与Python中的“ dtype”用法一致。
PyArray_GETITEM
(PyArrayObject * arr,void * itemptr )¶从ndarray arr中获得一个内置类型的Python对象,该对象由itemptr指向。NULL
失败返回。
numpy.ndarray.item
与PyArray_GETITEM相同。
这些函数和宏使您可以轻松地从C访问ndarray的元素。它们适用于所有数组。但是,如果访问数组中的数据不是机器字节顺序,未对齐或不可写,则可能需要小心。换句话说,除非您知道自己在做什么,否则请确保尊重标志的状态,或者以前已经使用保证了可写,对齐和机器字节顺序的数组PyArray_FromAny
。如果要处理所有类型的数组,则每种类型的copyswap函数对于处理行为异常的数组很有用。某些平台(例如Solaris)不喜欢未对齐的数据,如果取消引用未对齐的指针,则会崩溃。其他平台(例如x86 Linux)对未对齐的数据的处理只会更慢。
PyArray_GetPtr
(PyArrayObject * aobj,npy_intp * ind )¶返回指针到ndarray,的数据aobj,由c数组给定的N维的索引处,IND,(必须是至少aobj - >次的大小)。您可能想要将返回的指针类型转换为ndarray的数据类型。
PyArray_GETPTR1
(PyArrayObject * obj,npy_intp i )¶PyArray_GETPTR2
(PyArrayObject * obj,npy_intp i,npy_intp j )¶PyArray_GETPTR3
(PyArrayObject * obj,npy_intp i,npy_intp j,npy_intp k )¶PyArray_NewFromDescr
(PyTypeObject * 亚型,PyArray_Descr * DESCR,INT ND,npy_intp常量* 变暗,npy_intp常量* 进步,无效* 数据,INT 标志,的PyObject * OBJ )¶该函数窃取了对descr的引用。获得的最简单方法是使用PyArray_DescrFromType
。
这是主要的数组创建功能。大多数新阵列都是使用此灵活功能创建的。
返回的对象是Python类型子类型的对象,该子类型必须是的子类型PyArray_Type
。该数组具有nd
维,用dims描述。新数组的数据类型描述符为descr。
如果subtype是数组子类而不是base的子类
&PyArray_Type
,则obj是要传递给__array_finalize__
子类方法的对象。
如果data为NULL
,则将分配新的单位化内存,并且
标志可以为非零,以指示Fortran样式的连续数组。使用
PyArray_FILLWBYTE
初始化内存。
如果data不是NULL
,则假定它指向要用于该数组的内存,并且flags参数用作该数组的新标志(的状态除外NPY_ARRAY_OWNDATA
,
NPY_ARRAY_WRITEBACKIFCOPY
并且NPY_ARRAY_UPDATEIFCOPY
新数组的标志将被重置)。
此外,如果数据为非NULL,则还可以提供跨度。如果strides为NULL
,则将数组的步长计算为C样式的连续(默认)或Fortran样式的连续(对于data = 标志为非零,或者对于标志标志&
为非零,非NULL data)。提供的所有暗淡和步幅都将复制到新分配的维度和步幅数组中,以用于新的数组对象。NULL
NPY_ARRAY_F_CONTIGUOUS
PyArray_CheckStrides
可以帮助验证非NULL
跨步信息。
如果data
提供了它,则它必须在阵列的生命周期内保持活动状态。一种解决方法是通过PyArray_SetBaseObject
PyArray_NewLikeArray
(PyArrayObject * 原型,NPY_ORDER 顺序,PyArray_Descr * descr,int subok )¶1.6版中的新功能。
如果该函数不为NULL,则它将窃取对descr的引用。
该数组创建例程可方便地创建与现有数组的形状和内存布局匹配的新数组,并可能更改布局和/或数据类型。
当顺序是NPY_ANYORDER
,其结果是顺序
NPY_FORTRANORDER
如果原型是Fortran数组,
NPY_CORDER
否则。当顺序是
NPY_KEEPORDER
,结果顺序匹配的那个原型,即使当轴原型不是C或Fortran的顺序。
如果descr为NULL,则使用原型的数据类型。
如果subok为1,则新创建的数组将使用原型的子类型 创建新数组,否则它将创建基类数组。
PyArray_New
(PyTypeObject * 子类型,int nd,npy_intp const * dims,int type_num,npy_intp const * 步幅,void * data,int itemsize,int 标志,PyObject * obj )¶这类似于PyArray_NewFromDescr
(…),不同之处在于您使用type_num和itemsize指定数据类型描述符,其中type_num对应于内置(或用户定义)类型。如果类型始终具有相同的字节数,则将忽略itemsize。否则,itemsize指定此数组的特定大小。
警告
如果将数据传递给PyArray_NewFromDescr
或PyArray_New
,则在删除新阵列之前,不得释放该内存。如果此数据来自另一个Python对象,则可以Py_INCREF
在该对象上使用并将新数组的基本成员设置为指向该对象来实现。如果传递了步幅,则步幅必须与维度,项目大小和数组数据一致。
PyArray_SimpleNew
( int nd,npy_intp const * dims,int typenum )¶[ 源代码)创建类型,一个新的未初始化数组typenum,其大小在每个ND尺寸由整数数组给定,变暗用于阵列.The存储器时不被初始化(除非typenum是NPY_OBJECT
在这种情况下,阵列中的每个元素被设置为NULL) 。所述
typenum参数允许的任何内建的数据类型的规范,例如NPY_FLOAT
或NPY_LONG
。如果需要,可以使用PyArray_FILLWBYTE
(return_object,0)将数组的内存设置为零
。此函数不能用于创建灵活类型的数组(未提供项大小)。
PyArray_SimpleNewFromData
( int nd,npy_intp const * dims,int typenum,void * data )[源代码)¶创建围绕给定指针指向的数据的数组包装器。数组标志的默认值是数据区域行为良好且C样式连续。数组的形状由长度为nd的dims c-array给出。数组的数据类型由typenum表示。如果数据来自另一个引用计数的Python对象,则在传入指针后应增加此对象的引用计数,并且返回的ndarray的基本成员应指向拥有该数据的Python对象。这将确保在返回的数组存在时不会释放提供的内存。要释放ndarray后立即释放内存,请在返回的ndarray上设置OWNDATA标志。
PyArray_SimpleNewFromDescr
( int nd,npy_int const * dims,PyArray_Descr * descr )[源代码)¶该函数窃取了对descr的引用。
使用提供的数据类型描述符descr创建一个新数组,该描述符的形状由nd和dims确定。
PyArray_FILLWBYTE
(PyObject * obj,int val )¶用val的内容(以字节为单位)填充obj所指向的数组(该数组必须是ndarray的子类)。此宏调用memset,因此obj必须是连续的。
PyArray_Zeros
( INT ND,npy_intp常量* 变暗,PyArray_Descr * D型细胞,INT FORTRAN )¶使用dims给定的形状
和dtype给定的数据类型构造一个新的nd维数组。如果fortran不为零,则创建一个Fortran顺序数组,否则创建一个C顺序数组。用零填充内存(如果dtype
对应于,则填充0对象)。NPY_OBJECT
PyArray_ZEROS
( int nd,npy_intp const * dims,int type_num,int fortran )¶[ 源代码)¶宏形式PyArray_Zeros
采用类型编号而不是数据类型对象。
PyArray_Empty
( INT ND,npy_intp常量* 变暗,PyArray_Descr * D型细胞,INT FORTRAN )¶使用dims给定的形状
和dtype给定的数据类型构造一个新的nd维数组。如果fortran不为零,则创建一个Fortran顺序数组,否则创建一个C顺序数组。除非数据类型与之相对应,否则数组未初始化。NPY_OBJECT
Py_None
PyArray_EMPTY
( int nd,npy_intp const * dims,int typenum,int fortran )¶[ 源代码)¶宏形式PyArray_Empty
采用类型编号
typenum,而不是数据类型对象。
PyArray_Arange
(双 启动,双 站,双 步,诠释 typenum )¶构造一个新的一维数据类型为typenum的数组,其范围为start到stop(不包括),以step为增量 。等效于arange(start,stop,step,dtype)。
PyArray_ArangeObj
(PyObject * 开始,PyObject * 停止,PyObject * 步骤,PyArray_Descr * descr )¶构造一个由决定的数据类型的新一维数组
descr
,其范围为start
到stop
(排他),以递增step
。相当于人气指数(start
,
stop
,step
,typenum
)。
PyArray_SetBaseObject
(PyArrayObject * arr,PyObject * obj )¶1.7版中的新功能。
此函数窃取的基准来obj
,并将其设置的基础属性arr
。
如果通过传入自己的内存缓冲区作为参数来构造数组,则需要设置数组的base属性以确保内存缓冲区的生存期合适。
成功时返回值为0,失败时返回-1。
如果提供的对象是数组,则此函数将遍历基本指针链,以便每个数组直接指向内存的所有者。一旦设置了基准,就不能将其更改为另一个值。
PyArray_FromAny
(的PyObject * 运算,PyArray_Descr * D型细胞,INT min_depth,INT MAX_DEPTH,INT 要求,的PyObject * 上下文)¶这是用于从任何嵌套序列或公开数组接口op的对象获取数组的主要功能。参数允许所需的规格D型细胞,最小(min_depth)和最大值(MAX_DEPTH尺寸上可接受的)号码,以及其它的要求对阵列。该函数窃取了对 dtype参数的引用,该参数必须是PyArray_Descr
指示所需数据类型(包括所需字节序)的结构。的D型参数可以是NULL
,表示任何数据类型(和字节顺序)是可接受的。除非
NPY_ARRAY_FORCECAST
存在于flags
,如果无法从对象安全获取数据类型,则此调用将产生错误。如果你想使用
NULL
的D型和保证阵列notswapped再使用PyArray_CheckFromAny
。任一深度参数的值为0都会导致忽略该参数。可以添加以下任何数组标志(例如,使用|)来获取
需求参数。如果您的代码可以处理常规
数组(例如,跨步数组,字节交换数组或未对齐数组),则要求
可能为0。此外,如果op还不是数组(或不公开数组接口),则将创建一个新数组(并由op填充使用顺序协议)。新数组将NPY_ARRAY_DEFAULT
作为其flags成员。的上下文参数被传递给所述__array__
的方法运算,如果该阵列被构造这种方式仅使用。这个参数几乎总是NULL
。
NPY_ARRAY_C_CONTIGUOUS
¶确保返回的数组是C样式连续的
NPY_ARRAY_F_CONTIGUOUS
¶确保返回的数组是Fortran样式的连续数组。
NPY_ARRAY_ALIGNED
¶确保返回的数组在其数据类型的正确边界上对齐。对齐的数组具有数据指针,并且每个步长因子都是数据类型描述符的对齐因子的倍数。
NPY_ARRAY_WRITEABLE
¶确保返回的数组可以写入。
NPY_ARRAY_ENSURECOPY
¶确保使用op制作副本。如果不存在此标志,则可以避免不复制数据。
NPY_ARRAY_ENSUREARRAY
¶确保结果是基类ndarray。默认情况下,如果op是ndarray子类的实例,则返回相同子类的实例。如果设置了此标志,则将返回ndarray对象。
NPY_ARRAY_FORCECAST
¶即使无法安全地强制将其强制转换为输出类型。如果没有此标志,则仅在可以安全完成数据转换的情况下才会进行数据转换,否则会引发错误。
NPY_ARRAY_WRITEBACKIFCOPY
¶如果op已经是一个数组,但不满足要求,那么将进行复制(将满足要求)。如果存在此标志,并且必须创建(已经是数组的对象的)副本,则NPY_ARRAY_WRITEBACKIFCOPY
在返回的副本中设置相应的
标志,并将op设为只读。您必须确保调用
PyArray_ResolveWritebackIfCopy
将内容复制回op,并且op数组将再次变为可写状态。如果op从一开始就不可写,或者它还不是数组,则会引发错误。
NPY_ARRAY_UPDATEIFCOPY
¶不推荐使用。使用NPY_ARRAY_WRITEBACKIFCOPY
,这是相似的。当释放的数组被释放时,此标志“自动”将数据复制回去,这在所有python实现中均不受支持。
NPY_ARRAY_BEHAVED
¶NPY_ARRAY_CARRAY
¶NPY_ARRAY_CARRAY_RO
¶NPY_ARRAY_FARRAY
¶NPY_ARRAY_FARRAY_RO
¶NPY_ARRAY_DEFAULT
¶NPY_ARRAY_IN_ARRAY
¶NPY_ARRAY_IN_FARRAY
¶NPY_OUT_ARRAY
¶NPY_ARRAY_C_CONTIGUOUS
| NPY_ARRAY_WRITEABLE
|
NPY_ARRAY_ALIGNED
NPY_ARRAY_OUT_ARRAY
¶NPY_ARRAY_C_CONTIGUOUS
| NPY_ARRAY_ALIGNED
|
NPY_ARRAY_WRITEABLE
NPY_ARRAY_OUT_FARRAY
¶NPY_ARRAY_F_CONTIGUOUS
| NPY_ARRAY_WRITEABLE
|
NPY_ARRAY_ALIGNED
NPY_ARRAY_INOUT_ARRAY
¶NPY_ARRAY_C_CONTIGUOUS
| NPY_ARRAY_WRITEABLE
|
NPY_ARRAY_ALIGNED
| NPY_ARRAY_WRITEBACKIFCOPY
|
NPY_ARRAY_UPDATEIFCOPY
NPY_ARRAY_INOUT_FARRAY
¶NPY_ARRAY_F_CONTIGUOUS
| NPY_ARRAY_WRITEABLE
|
NPY_ARRAY_ALIGNED
| NPY_ARRAY_WRITEBACKIFCOPY
|
NPY_ARRAY_UPDATEIFCOPY
PyArray_GetArrayParamsFromObject
(的PyObject * 运算,PyArray_Descr * requested_dtype,