python-3.x - 如何获取 numpy 3-D 数组的对角线分量?

标签 python-3.x numpy scipy diagonal

我有一个像这样的 3-D 数组

a = np.array(
    [[[1, 2],
      [3, 4]],

     [[5, 6],
      [7, 8]]]
)

我想从这个数组中获取对角线分量,我的意思是,

>> np.array([a[i,i,:] for i in range(min(a.shape[0], a.shape[1]))])
array([[1, 2],
       [7, 8]])

有没有更快的方法可以完成与上面相同的操作?

最佳答案

np.diagonal适用于二维以上的数组,您可以使用参数 axis1axis2 指定要查看的轴,对于您的情况,默认值 (axis1=0, axis2 =1)作品:

np.diagonal(a, axis1=0, axis2=1).T
# array([[1, 2],
#        [7, 8]])

它也适用于在两个轴上具有不同大小的数组:

a = np.array(
    [[[1, 2],
      [3, 4]],
​
     [[5, 6],
      [7, 8]],

     [[9, 10],
      [11, 12]]]
)
​
np.diagonal(a).T
#array([[1, 2],
#       [7, 8]])

a = np.array(
    [[[1, 2],
      [3, 4],
      [9, 10]],
​
     [[5, 6],
      [7, 8],
      [11, 12]]]
)
​
np.diagonal(a).T
#array([[1, 2],
#       [7, 8]])

或者您可以使用advanced indexing :

创建范围索引:

idx = np.arange(min(a.shape[:2]))

idx
# array([0, 1])

使用整数数组索引第一和第二维,使用切片索引第三维:

a[idx, idx, :]
#array([[1, 2],
#       [7, 8]])

关于python-3.x - 如何获取 numpy 3-D 数组的对角线分量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48071508/

相关文章:

python - 在 python () 中查找作为集合数组成员的数组元素

python - 在 Python 中创建矩阵

python - 无法在 Linux 上导入 Python 包

python - 带有 Python 库的小波图

python - 使用 find_peaks 查找局部最大值

python - 如何找到最小长度为 3 的所有可能的连续且不重叠的子列表

python - 迭代并行列表并将一个列表中的制表符分隔文本转换为其他列表中的 csv 路径

python - 使用 Python 查找盘符 (Windows)

python-3.x - 即使空闲没有显示错误,pygame 事件键也没有响应?

python - 与极稀疏矩阵相乘的最快方法是什么?