• Python中的3D矩阵操作


    3072062231a7c86db08489d3d2d98653.png

    迷途小书童

    读完需要

    6

    分钟

    速读仅需 2 分钟

    3D 矩阵又称为立体矩阵,是指一个具有三个维度的矩阵结构。相比二维矩阵,它增加了一个深度维度。在 3D 矩阵中,第一个维度表示行数,第二个维度表示列数,第三个维度表示层数或深度,可以想象成一个多层的立方体结构。三维矩阵通常也称为 NxNxN 矩阵,在计算机视觉、医学成像、深度学习、增强现实等各个领域和应用中都非常有用。

    本文中,我们将逐步介绍在 Python 中如何实现和使用 3D 矩阵,这里会介绍 2 种方法

    • 使用 python 中的列表

    • 使用 numpy 库

    1

       

    列表实现

    使用嵌套列表来实现 3D 矩阵是相对容易想到的方法。我们将从一个空列表开始,并向其中添加更多列表以表示 3D 矩阵的每一层。在此 3D 矩阵的每一层中,我们将附加列表来表示行,并在每行中添加各个元素。这样,我们将构建一个列表层次结构,模拟矩阵的三个维度。通过遍历列表的层次结构,我们可以访问和修改矩阵中的各个部分。

    比如,我们要创建一个全是零的 3D 矩阵

    1. N = 3
    2. three_d_matrix = [[[0 for _ in range(N)] for _ in range(N)] for _ in range(N)]
    3. print(three_d_matrix)

    这行代码使用嵌套列表推导式创建一个全是 0 的 3D 矩阵。每个 for _ in range(N) 循环都会创建一个包含 N 个零的一维列表。这里,_ 是当我们不需要循环变量时使用的常见约定。

    代码的执行的结果是

    [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

    要访问和修改 3D 矩阵中的元素,我们可以这样做

    1. # 给元素赋值
    2. three_d_matrix[0][1][2] = 33

    要打印整个 3D 矩阵

    1. for layer in three_d_matrix:
    2. for row in layer:
    3. print(row)
    4. print("-" * 10)

    打印语句的输出是

    1. [0,0,0]
    2. [0,0,33]
    3. [0,0,0]
    4. ----------
    5. [0,0,0]
    6. [0,0,0]
    7. [0,0,0]
    8. ----------
    9. [0,0,0]
    10. [0,0,0]
    11. [0,0,0]
    12. ----------

    2

       

    使用 NumPy 实现

    NumPy 是一个用于数值和科学计算的 Pyhton 库,它包含广泛的内置功能,可用于各种用途。要使用 Numpy,首先要做的就是安装 NumPy 库,执行命令

    pip install numpy

    下面我们来看看如何实现

    1. import numpy as np
    2. N = 3
    3. three_d_matrix = np.zeros((N, N, N), dtype=int)
    4. print(three_d_matrix)

    这里通过 np.zeros() 来创建一个全是 0 的 3D 数组,其中 (N, N, N) 参数指定数组的形状,dtype=int 指定数组元素的数据类型。

    代码执行的结果是

    1. [[[0 0 0]
    2. [0 0 0]
    3. [0 0 0]]
    4. [[0 0 0]
    5. [0 0 0]
    6. [0 0 0]]
    7. [[0 0 0]
    8. [0 0 0]
    9. [0 0 0]]]

    访问和修改元素

    three_d_matrix[0, 1, 2] = 33

    要迭代 3D 矩阵中的每个元素,我们需要借助嵌套 for 循环

    1. import numpy as np
    2. N = 3
    3. array = np.random.rand(N, N, N)
    4. for i in range(N):
    5. for j in range(N):
    6. for k in range(N):
    7. element = array[i, j, k]
    8. print(f"Element at ({i}, {j}, {k}) = {element}")

    矩阵加法

    1. import numpy as np
    2. N = 3
    3. array1 = np.random.rand(N, N, N)
    4. array2 = np.random.rand(N, N, N)
    5. result = array1 + array2
    6. print(result)

    类似地,对于减法

    1. import numpy as np
    2. N = 3
    3. array1 = np.random.rand(N, N, N)
    4. array2 = np.random.rand(N, N, N)
    5. result = array1 - array2
    6. print(result)

    然后就是乘法

    1. import numpy as np
    2. N = 3
    3. array1 = np.random.rand(N, N, N)
    4. array2 = np.random.rand(N, N, N)
    5. result = np.matmul(array1, array2)
    6. print(result)

    转置操作

    1. import numpy as np
    2. N = 3
    3. array = np.random.rand(N, N, N)
    4. transposed_array = array.transpose()
    5. print("Original Array:")
    6. print(array)
    7. print("\nTransposed Array:")
    8. print(transposed_array)

    transpose() 是一个内置的 NumPy 函数,用于执行 3D 数组的转置。矩阵的转置是一个新的矩阵,其中的行变成列,列变成行。

    3

       

    总结

    通过实现代码的对比,我们可以清楚地看到,2 种方法中,使用 NumPy 可以更快地执行数值计算,并且具有更丰富的功能,效率也更高。

    4

       

    免费社群

    a156a9c74fdf7b59a85b0488e86a11d2.jpeg

    a05c4f10df1bb7b76f3d4a1bc0792fdd.gif

  • 相关阅读:
    HJ70 矩阵乘法计算量估算
    【小程序源码】笑话与趣图框架
    SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例
    VueHub:我用 ChatGPT 开发的第一个项目,送给所有 Vue 爱好者
    Tomcat 部署与优化
    25.4 MySQL 函数
    浅谈精密配电多回路监控装置在轨道交通项目上的应用
    基于单片机的CO2温湿度电路设计(#0217)
    mapper-reducer编程搭建
    ✔ ★【备战实习(面经+项目+算法)】 10.22学习时间表(总计学习时间:4.5h)(算法刷题:7道)
  • 原文地址:https://blog.csdn.net/djstavaV/article/details/133154285