dask.array.diagonal
dask.array.diagonal¶
- dask.array.diagonal(a, offset=0, axis1=0, axis2=1)[源代码]¶
返回指定的对角线。
此文档字符串是从 numpy.diagonal 复制的。
Dask 版本可能存在一些不一致性。
如果 a 是二维的,返回 a 的指定偏移的对角线,即形式为
a[i, i+offset]
的元素集合。如果 a 有多于两个维度,那么由 axis1 和 axis2 指定的轴用于确定其对角线被返回的二维子数组。结果数组的形状可以通过移除 axis1 和 axis2,并在右侧附加一个等于结果对角线大小的索引来确定。在NumPy 1.7之前的版本中,此函数总是返回一个包含对角线值副本的新独立数组。
在 NumPy 1.7 和 1.8 中,它继续返回对角线的副本,但依赖于此事实已被弃用。写入结果数组的行为与过去相同,但会发出 FutureWarning。
从 NumPy 1.9 开始,它返回原始数组的只读视图。尝试写入结果数组将产生错误。
在未来的某个版本中,它将返回一个可读/写的视图,并且写入返回的数组将改变原始数组。返回的数组将与输入数组具有相同的类型。
如果你不向这个函数返回的数组写入数据,那么你可以忽略上述所有内容。
如果你依赖当前的行为,那么我们建议显式地复制返回的数组,即使用
np.diagonal(a).copy()
而不是仅仅np.diagonal(a)
。这将适用于NumPy的过去和未来版本。- 参数
- aarray_like
从中提取对角线的数组。
- 偏移量int, 可选
对角线相对于主对角线的偏移量。可以是正数或负数。默认为主对角线(0)。
- 轴1int, 可选
要作为2-D子数组的第一个轴使用的轴,从中应提取对角线。默认为第一个轴(0)。
- axis2int, 可选
要作为二维子数组的第二个轴使用的轴,应从中提取对角线。默认为第二个轴(1)。
- 返回
- array_of_diagonalsndarray
如果 a 是二维的,那么将返回一个包含对角线的1维数组,且类型与 a 相同,除非 a 是一个 矩阵,在这种情况下,为了保持向后兼容性,将返回一个1维数组而不是一个(二维)`矩阵`。
如果
a.ndim > 2
,那么由 axis1 和 axis2 指定的维度将被移除,并在末尾插入一个新的轴,对应于对角线。
- Raises
- ValueError
如果 a 的维度小于 2。
示例
>>> import numpy as np >>> a = np.arange(4).reshape(2,2) >>> a array([[0, 1], [2, 3]]) >>> a.diagonal() array([0, 3]) >>> a.diagonal(1) array([1])
一个三维示例:
>>> a = np.arange(8).reshape(2,2,2); a array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) >>> a.diagonal(0, # Main diagonals of two arrays created by skipping ... 0, # across the outer(left)-most axis last and ... 1) # the "middle" (row) axis first. array([[0, 6], [1, 7]])
我们刚刚得到的子数组的主对角线;请注意,每个子数组对应于固定最右边的(列)轴,并且对角线是按行“打包”的。
>>> a[:,:,0] # main diagonal is [0 6] array([[0, 2], [4, 6]]) >>> a[:,:,1] # main diagonal is [1 7] array([[1, 3], [5, 7]])
反对角线可以通过使用 numpy.flipud 或 numpy.fliplr 反转元素的顺序来获得。
>>> a = np.arange(9).reshape(3, 3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> np.fliplr(a).diagonal() # Horizontal flip array([2, 4, 6]) >>> np.flipud(a).diagonal() # Vertical flip array([6, 4, 2])
请注意,对角线检索的顺序会根据翻转函数的变化而变化。