cupy.ndarray#

class cupy.ndarray(self, shape, dtype=float, memptr=None, strides=None, order='C')[源代码]#

CUDA 设备上的多维数组。

此类实现了 numpy.ndarray 方法的一个子集。不同之处在于,此类在当前的 GPU 设备上分配数组内容。

参数:
  • shape (tuple of ints) – 轴的长度。

  • dtype – 数据类型。它必须是 numpy.dtype 的参数。

  • memptr (cupy.cuda.MemoryPointer) – 指向数组内容头的指针。

  • strides (tuple of ints or None) – 内存中的数据步幅。

  • order ({'C', 'F'}) – 行优先(C风格)或列优先(Fortran风格)顺序。

变量:
  • base (None or cupy.ndarray) – 作为视图创建此数组的基数组。

  • data (cupy.cuda.MemoryPointer) – 指向数组内容头的指针。

  • ~ndarray.dtype (numpy.dtype) – 元素类型的Dtype对象。 .. 另见:: 数据类型对象 (dtype)

  • ~ndarray.size (int) – 此数组包含的元素数量。这等同于形状元组中各元素的乘积。 .. seealso:: numpy.ndarray.size

方法

__getitem__()#

x.__getitem__(y) <==> x[y]

支持基本和高级索引。

备注

目前,它不支持由多个布尔数组组成的 slices

备注

CuPy 处理越界索引的方式与 NumPy 不同。NumPy 通过引发错误来处理它们,但 CuPy 会将它们环绕处理。

示例

>>> a = cupy.arange(3)
>>> a[[1, 3]]
array([1, 0])
__setitem__()#

x.__setitem__(slices, y) <==> x[slices] = y

支持基本和高级索引。

备注

目前,它不支持由多个布尔数组组成的 slices

备注

当使用整数数组索引时,CuPy 处理越界索引的方式与 NumPy 不同。NumPy 通过引发错误来处理它们,但 CuPy 会绕过它们。

>>> import cupy
>>> x = cupy.arange(3)
>>> x[[1, 3]] = 10
>>> x
array([10, 10,  2])

备注

slices 中的整数数组多次引用同一位置时,其行为与 NumPy 不同。在这种情况下,实际存储的值是未定义的。

>>> import cupy
>>> a = cupy.zeros((2,))
>>> i = cupy.arange(10000) % 2
>>> v = cupy.arange(10000).astype(cupy.float64)
>>> a[i] = v
>>> a  
array([9150., 9151.])

另一方面,NumPy存储与引用重复位置的索引中的最后一个索引对应的值。

>>> import numpy
>>> a_cpu = numpy.zeros((2,))
>>> i_cpu = numpy.arange(10000) % 2
>>> v_cpu = numpy.arange(10000).astype(numpy.float64)
>>> a_cpu[i_cpu] = v_cpu
>>> a_cpu
array([9998., 9999.])
__len__()#

返回 len(self)。

__iter__()#

实现 iter(self)。

__copy__(self)#
all(self, axis=None, out=None, keepdims=False) ndarray#
any(self, axis=None, out=None, keepdims=False) ndarray#
argmax(self, axis=None, out=None, dtype=None, keepdims=False) ndarray#

返回沿给定轴的最大值的索引。

备注

dtypekeepdim 参数是特定于 CuPy 的。它们不在 NumPy 中。

备注

axis 参数接受一个整数的元组,但这是特定于 CuPy 的。NumPy 不支持它。

参见

cupy.argmax() 获取完整文档, numpy.ndarray.argmax()

argmin(self, axis=None, out=None, dtype=None, keepdims=False) ndarray#

返回沿给定轴的最小值的索引。

备注

dtypekeepdim 参数是特定于 CuPy 的。它们不在 NumPy 中。

备注

axis 参数接受一个整数的元组,但这是特定于 CuPy 的。NumPy 不支持它。

参见

cupy.argmin() 获取完整文档, numpy.ndarray.argmin()

argpartition(self, kth, axis=-1) ndarray#

返回可以部分排序数组的索引。

参数:
  • kth (int or sequence of ints) – 按其分区的元素索引。如果提供一个第k个的序列,它将把所有由第k个索引的元素一次性分区到它们的排序位置。

  • axis (int or None) – 要排序的轴。默认是 -1,这意味着沿着最后一个轴排序。如果提供 None,则在排序前将数组展平。

返回:

a 类型和形状相同的数组。

返回类型:

cupy.ndarray

参见

cupy.argpartition() 获取完整文档,numpy.ndarray.argpartition()

argsort(self, axis=-1) ndarray#

返回将以稳定排序方式对数组进行排序的索引

参数:

axis (int or None) – 要排序的轴。默认是 -1,这意味着沿着最后一个轴排序。如果提供 None,则在排序前将数组展平。

返回:

对数组进行排序的索引数组。

返回类型:

cupy.ndarray

参见

cupy.argsort() 获取完整文档, numpy.ndarray.argsort()

astype(self, dtype, order='K', casting=None, subok=None, copy=True) ndarray#

将数组转换为给定的数据类型。

参数:
  • dtype – 类型说明符。

  • order ({'C', 'F', 'A', 'K'}) – 行优先(C风格)或列优先(Fortran风格)顺序。当 order 为 ‘A’ 时,如果 a 是列优先则使用 ‘F’,否则使用 ‘C’。当 order 为 ‘K’ 时,它会尽可能保持步幅。

  • copy (bool) – 如果为 False 且没有发生类型转换,则此方法返回数组本身。否则,返回一个副本。

返回:

如果 copy 为 False 且不需要类型转换,则返回数组本身。否则,返回数组的一个(可能经过类型转换的)副本。

备注

此方法目前不支持 castingsubok 参数。

参见

numpy.ndarray.astype()

choose(self, choices, out=None, mode='raise')#
clip(self, min=None, max=None, out=None) ndarray#

返回一个数组,其值限制在 [min, max] 范围内。

参见

cupy.clip() 获取完整文档, numpy.ndarray.clip()

compress(self, condition, axis=None, out=None) ndarray#

返回沿给定轴选择的本数组的切片。

警告

此功能可能会同步设备。

参见

cupy.compress() 获取完整文档, numpy.ndarray.compress()

conj(self) ndarray#
conjugate(self) ndarray#
copy(self, order='C') ndarray#

返回数组的副本。

此方法在当前设备中复制给定的数组。即使给定的数组位于另一个设备中,您也可以将其复制到当前设备。

参数:

order ({'C', 'F', 'A', 'K'}) – 行优先(C风格)或列优先(Fortran风格)顺序。当 order 为 ‘A’ 时,如果 a 是列优先则使用 ‘F’,否则使用 ‘C’。当 order 为 ‘K’ 时,它会尽可能紧密地保持步幅。

参见

cupy.copy() 获取完整文档, numpy.ndarray.copy()

cumprod(self, axis=None, dtype=None, out=None) ndarray#

返回沿给定轴的数组的累积乘积。

参见

cupy.cumprod() 获取完整文档, numpy.ndarray.cumprod()

cumsum(self, axis=None, dtype=None, out=None) ndarray#

返回沿给定轴的数组的累积和。

参见

cupy.cumsum() 获取完整文档, numpy.ndarray.cumsum()

diagonal(self, offset=0, axis1=0, axis2=1) ndarray#

返回指定对角线的视图。

参见

cupy.diagonal() 获取完整文档, numpy.ndarray.diagonal()

dot(self, ndarray b, ndarray out=None)#

返回与给定数组的点积。

参见

cupy.dot() 获取完整文档, numpy.ndarray.dot()

dump(self, file)#

将数组的 pickle 转储到文件中。

转储的文件可以通过 cupy.load() 读回为 cupy.ndarray

dumps(self) bytes#

将数组的 pickle 转储到字符串中。

fill(self, value)#

用标量值填充数组。

参数:

value – 用于填充数组内容的标量值。

参见

numpy.ndarray.fill()

flatten(self, order='C') ndarray#

返回数组展平为一维的副本。

参数:

order ({'C', 'F', 'A', 'K'}) – ‘C’ 表示按行优先(C 风格)顺序展平。’F’ 表示按列优先(Fortran 风格)顺序展平。’A’ 表示如果 self 在内存中是 Fortran 连续 的,则按列优先顺序展平,否则按行优先顺序展平。’K’ 表示按内存中元素出现的顺序展平 self。默认是 ‘C’。

返回:

数组的一个副本,具有一个维度。

返回类型:

cupy.ndarray

参见

numpy.ndarray.flatten()

get(self, stream=None, order='C', out=None, blocking=True)#

返回主机内存中数组的副本。

参数:
  • stream (cupy.cuda.Stream) – CUDA 流对象。如果提供,则使用该流来执行复制。否则,使用当前流。

  • order ({'C', 'F', 'A'}) – 主机数组所需的内存布局。当 order 为 ‘A’ 时,如果数组是 fortran 连续的,则使用 ‘F’,否则使用 ‘C’。如果指定了 out,则 order 将被忽略。

  • out (numpy.ndarray) – 输出数组。为了启用异步复制,底层内存应为固定内存。

  • blocking (bool) – 如果设置为 False ,复制操作将在给定的(如果提供)或当前流上异步运行,用户需负责确保流的顺序。默认值为 True ,因此复制操作是同步的(相对于主机)。

返回:

主机内存中的数组副本。

返回类型:

numpy.ndarray

item(self)#

将包含一个元素的数组转换为 Python 标量

返回:

数组的元素。

返回类型:

int or float or complex

参见

numpy.ndarray.item()

max(self, axis=None, out=None, keepdims=False) ndarray#

返回沿给定轴的最大值。

参见

cupy.amax() 获取完整文档, numpy.ndarray.max()

mean(self, axis=None, dtype=None, out=None, keepdims=False) ndarray#

返回沿给定轴的平均值。

参见

cupy.mean() 获取完整文档, numpy.ndarray.mean()

min(self, axis=None, out=None, keepdims=False) ndarray#

返回沿给定轴的最小值。

参见

cupy.amin() 获取完整文档, numpy.ndarray.min()

nonzero(self) tuple#

返回非零元素的索引。

返回的数组包含该维度中非零元素的索引。

返回:

非零元素的索引。

返回类型:

tuple of arrays

警告

此功能可能会同步设备。

参见

numpy.nonzero()

partition(self, kth, int axis=-1)#

分区一个数组。

参数:
  • kth (int or sequence of ints) – 按其分区的元素索引。如果提供一个第k个的序列,它将把所有由第k个索引的元素一次性分区到它们的排序位置。

  • axis (int) – 要排序的轴。默认值为 -1,这意味着沿着最后一个轴排序。

参见

cupy.partition() 获取完整文档, numpy.ndarray.partition()

prod(self, axis=None, dtype=None, out=None, keepdims=None) ndarray#

返回沿给定轴的乘积。

参见

cupy.prod() 获取完整文档,numpy.ndarray.prod()

ptp(self, axis=None, out=None, keepdims=False) ndarray#

返回沿给定轴的最大值与最小值之差。

参见

cupy.ptp() 获取完整文档, numpy.ndarray.ptp()

put(self, indices, values, mode='wrap')#

用给定的值替换数组中的指定元素。

参见

cupy.put() 获取完整文档, numpy.ndarray.put()

ravel(self, order='C') ndarray#

返回一个展平为一维的数组。

参见

cupy.ravel() 获取完整文档, numpy.ndarray.ravel()

reduced_view(self, dtype=None) ndarray#

返回数组的最小维度视图。

参数:

dtype – (已弃用)数据类型说明符。如果给出,则内存序列将被重新解释为新类型。

返回:

减少维度后的数组视图。

返回类型:

cupy.ndarray

repeat(self, repeats, axis=None)#

沿轴返回重复数组的数组。

参见

cupy.repeat() 获取完整文档, numpy.ndarray.repeat()

reshape(self, *shape, order='C')#

返回一个形状不同但内容相同的新数组。

参见

cupy.reshape() 获取完整文档, numpy.ndarray.reshape()

round(self, decimals=0, out=None) ndarray#

返回一个数组,其值四舍五入到给定的位数。

参见

cupy.around() 获取完整文档, numpy.ndarray.round()

scatter_add(self, slices, value)#

将给定的值添加到数组的指定元素中。

参见

cupyx.scatter_add() 获取完整文档。

scatter_max(self, slices, value)#

将由索引指定的元素的最大值存储到一个数组中。

参见

cupyx.scatter_max() 获取完整文档。

scatter_min(self, slices, value)#

将由索引指定的元素的最小值存储到一个数组中。

参见

cupyx.scatter_min() 获取完整文档。

searchsorted(self, v, side='left', sorter=None)#

查找v中元素应插入以保持顺序的索引。

有关完整文档,请参阅 cupy.searchsorted()

返回:

参见

numpy.searchsorted()

set(self, arr, stream=None)#

将主机内存中的数组复制到 cupy.ndarray

参数:
  • arr (numpy.ndarray) – 主机内存上的源数组。

  • stream (cupy.cuda.Stream) – CUDA 流对象。如果提供,则使用该流来执行复制。否则,使用当前流。

sort(self, int axis=-1)#

使用稳定的排序算法对数组进行原地排序。

参数:

axis (int) – 要排序的轴。默认值为 -1,这意味着沿着最后一个轴排序。

备注

由于其实现原因,ndarray.sort 目前仅支持具有自身数据的数组,并且不支持 numpy.ndarray.sort 所支持的 kindorder 参数。

参见

cupy.sort() 获取完整文档, numpy.ndarray.sort()

squeeze(self, axis=None) ndarray#

返回一个移除了尺寸为一的轴的视图。

参见

cupy.squeeze() 获取完整文档,numpy.ndarray.squeeze()

std(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False) ndarray#

返回沿给定轴的标准偏差。

参见

cupy.std() 获取完整文档, numpy.ndarray.std()

sum(self, axis=None, dtype=None, out=None, keepdims=False) ndarray#

返回沿给定轴的和。

参见

cupy.sum() 获取完整文档, numpy.ndarray.sum()

swapaxes(self, Py_ssize_t axis1, Py_ssize_t axis2) ndarray#

返回一个数组视图,其中两个轴已交换。

参见

cupy.swapaxes() 获取完整文档,numpy.ndarray.swapaxes()

take(self, indices, axis=None, out=None) ndarray#

返回沿指定轴在给定索引处的元素数组。

参见

cupy.take() 获取完整文档, numpy.ndarray.take()

toDlpack(self)#

零拷贝转换为 DLPack 张量。

DLPack 是一个在本仓库中提出的内存中的张量结构:dmlc/dlpack

此函数返回一个包含指向从自身ndarray转换的DLPack张量指针的 PyCapsule 对象。此函数不会将自身数据复制到输出的DLpack张量中,而是共享指向相同数据内存区域的指针。

返回:

输出封装在 PyCapsule 对象中的 DLPack 张量。

返回类型:

dltensor (PyCapsule)

参见

fromDlpack() 是一个用于从 DLPack 张量(封装在 PyCapsule 对象中)到 ndarray 的零拷贝转换的方法。

警告

根据 DLPack v0.3 规范,(隐含地)假设用户负责确保生产者和消费者在同一流上操作。这一要求可能在未来的 DLPack 版本中放宽/更改。

示例

>>> import cupy
>>> array1 = cupy.array([0, 1, 2], dtype=cupy.float32)
>>> dltensor = array1.toDlpack()
>>> array2 = cupy.fromDlpack(dltensor)
>>> cupy.testing.assert_array_equal(array1, array2)
tobytes(self, order='C') bytes#

将数组转换为 Python 字节对象。

tofile(self, fid, sep='', format='%s')#

将数组写入文件。

参见

numpy.ndarray.tofile()

tolist(self)#

将数组转换为(可能是嵌套的)Python列表。

返回:

可能是嵌套的Python列表的数组元素。

返回类型:

list

参见

numpy.ndarray.tolist()

trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None) ndarray#

返回沿数组对角线的和。

参见

cupy.trace() 获取完整文档, numpy.ndarray.trace()

transpose(self, *axes)#

返回数组的一个视图,其中轴已置换。

参见

cupy.transpose() 获取完整文档, numpy.ndarray.reshape()

var(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False) ndarray#

返回沿给定轴的方差。

参见

cupy.var() 获取完整文档, numpy.ndarray.var()

view(self, dtype=None, type=None)#

返回数组的视图。

参数:

dtype – 如果这与数组的数据类型不同,返回的视图将重新解释内存序列为此类型的数组。

返回:

数组的视图。对原始数组的引用存储在 base 属性中。

返回类型:

cupy.ndarray

参见

numpy.ndarray.view()

__eq__(value, /)#

返回 self==value。

__ne__(value, /)#

返回 self!=value。

__lt__(value, /)#

返回 self<value。

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。

__bool__()#

如果 self 为真则返回 True,否则返回 False

属性

T#

数组的形状反转视图。

如果 ndim < 2,那么这就是对数组本身的引用。

base#
cstruct#

数组的C语言表示。

此属性用于将数组发送到CUDA内核。返回的C结构类型因不同的dtypes和ndims而异。C类型的定义写在 cupy/carray.cuh 中。

data#
device#

此数组所在的 CUDA 设备。

dtype#
flags#

包含内存布局信息的对象。

它仅包含 c_contiguousf_contiguousowndata 属性。所有这些属性都是只读的。也支持通过索引访问。

参见

numpy.ndarray.flags

flat#
imag#
itemsize#

每个元素的大小(以字节为单位)。

参见

numpy.ndarray.itemsize

nbytes#

所有元素的总大小(以字节为单位)。

它不计算元素之间的跳过次数。

参见

numpy.ndarray.nbytes

ndim#

维度数量。

a.ndim 等同于 len(a.shape)

参见

numpy.ndarray.ndim

real#
shape#

轴的长度。

此属性的设置器涉及在不复制的情况下重塑形状。如果数组无法在不复制的情况下重塑,则会引发异常。

size#
strides#

轴的步幅,以字节为单位。

参见

numpy.ndarray.strides