欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

Python中的3D矩阵操作

Python基础 迷途小书童 1年前 (2023-09-20) 889次浏览 0个评论

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

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

  • 使用python中的列表
  • 使用numpy库

列表实现

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

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

N = 3
three_d_matrix = [[[0 for _ in range(N)] for _ in range(N)] for _ in range(N)]
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 矩阵中的元素,我们可以这样做

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

要打印整个 3D 矩阵

for layer in three_d_matrix:
    for row in layer:
        print(row)
    print("-" * 10)

打印语句的输出是

[0,0,0]
[0,0,33]
[0,0,0]
----------
[0,0,0]
[0,0,0]
[0,0,0]
----------
[0,0,0]
[0,0,0]
[0,0,0]
----------

使用NumPy实现

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

pip install numpy

下面我们来看看如何实现

import numpy as np

N = 3
three_d_matrix = np.zeros((N, N, N), dtype=int)
print(three_d_matrix)

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

代码执行的结果是

[[[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]]]

访问和修改元素

three_d_matrix[0, 1, 2] = 33

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

import numpy as np

N = 3
array = np.random.rand(N, N, N)

for i in range(N):
    for j in range(N):
        for k in range(N):
            element = array[i, j, k]
            print(f"Element at ({i}, {j}, {k}) = {element}")

矩阵加法

import numpy as np

N = 3
array1 = np.random.rand(N, N, N)
array2 = np.random.rand(N, N, N)
result = array1 + array2
print(result)

类似地,对于减法

import numpy as np

N = 3
array1 = np.random.rand(N, N, N)
array2 = np.random.rand(N, N, N)
result = array1 - array2
print(result)

然后就是乘法

import numpy as np

N = 3 
array1 = np.random.rand(N, N, N)  
array2 = np.random.rand(N, N, N)  
result = np.matmul(array1, array2)
print(result)

转置操作

import numpy as np

N = 3
array = np.random.rand(N, N, N)
transposed_array = array.transpose()
print("Original Array:")
print(array)
print("\nTransposed Array:")
print(transposed_array)

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

总结

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

喜欢 (0)

您必须 登录 才能发表评论!