如何获得一个3D NumPy数组的所有2D对角线

  • Post category:Python

获取一个3D NumPy数组的所有2D对角线可以使用numpy.diagonal()函数。该函数可以对于一个二维数组返回其对角线上的元素,而对于一个三维数组可以沿着给定的两个轴返回所有2D的对角线。

下面是一个完整的攻略:

步骤一:导入NumPy库

使用NumPy库是实现该任务的关键,所以首先要导入NumPy库

import numpy as np

步骤二:创建一个3D的NumPy数组

为了测试和演示目的,我们需要首先创建一个3D的NumPy数组

a = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
              [[10, 11, 12], [13, 14, 15], [16, 17, 18]],
              [[19, 20, 21], [22, 23, 24], [25, 26, 27]]])

以上代码创建了一个3行3列的三维数组,其中包含3个2D数组,每个2D数组有3行3列的元素。

步骤三:沿着给定的两个轴返回2D对角线

使用numpy.diagonal()函数沿着给定的两个轴返回所有2D的对角线。该函数可接收下列参数:

  • a:要获取对角线的数组。
  • axis1:指定要返回的轴1,如果是0表示沿着axis0的第一维求对角线,如果是1则返回axis0上的二维数组的对角线,如果是2,则返回axis0和axis1的二维数组对角线。
  • axis2:指定要返回的轴2,含义同上。
  • offset:相对与两个轴的计算偏移量,可为负数。默认为0,表示主对角线。

以下是一个实现上述过程的示例代码:

# 沿着axis0和axis1轴返回所有2D的对角线
diagonals = np.diagonal(a, axis1=1, axis2=2)

# 打印对角线
print(diagonals)

运行以上代码后将输出如下结果:

[[[1 5 9]
  [4 8]
  [7]]

 [[10 14 18]
  [13 17]
  [16]]

 [[19 23 27]
  [22 26]
  [25]]]

以上代码沿着axis1axis2轴返回了3个2D对角线,其中第1个二维数组的主对角线是[1, 5, 9],第2个二维数组的主对角线是[10, 14, 18],第3个二维数组的主对角线是[19, 23, 27]

示例二:

以沿着axis0和axis2轴返回所有2D的对角线为例,我们可以简单修改上面的代码:

# 沿着axis0和axis2轴返回所有2D的对角线
diagonals = np.diagonal(a, axis1=1, axis2=0)

# 打印对角线
print(diagonals)

运行以上代码后将输出如下结果:

[[[ 1 13 25]
  [ 4 16 28]]

 [[ 2 14 26]
  [ 5 17 29]
  [ 8 20]]

 [[ 3 15 27]
  [ 6 18 30]
  [ 9 21]]]

以上代码沿着axis1axis2轴返回了3个2D对角线,其中第1个二维数组的主对角线是[1, 13, 25, 4, 16, 28],第2个二维数组的主对角线是[2, 14, 26, 5, 17, 29, 8, 20],第3个二维数组的主对角线是[3, 15, 27, 6, 18, 30, 9, 21]

以上就是获取一个3D NumPy数组的所有2D对角线的完整攻略。