gpt4 book ai didi

python - numpy中的3维数组

转载 作者:IT老高 更新时间:2023-10-28 21:45:28 25 4
gpt4 key购买 nike

Python 和 Numpy 的新手,尝试创建 3 维数组。我的问题是尺寸的顺序与 Matlab 相比是关闭的。事实上,这个顺序根本没有意义。

创建矩阵:

x = np.zeros((2,3,4))

在我的世界中,这应该导致 2 行、3 列和 4 个深度维度,并且应该显示为:

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

即 3 行 4 列 2 个深度维度。也就是说,第一个维度是“深度”。为了进一步增加这个问题,使用 OpenCV 导入图像,颜色维度是最后一个维度,也就是说,我将颜色信息视为深度维度。如果我只想在已知较小的 3 维数组上尝试一些东西,这会使事情变得非常复杂。

我是不是误会了什么?如果不是,为什么使用这种不直观的方式处理 3D 维数组是 numpy?

最佳答案

你有一个截断的数组表示。我们来看一个完整的例子:

>>> a = np.zeros((2, 3, 4))
>>> a
array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],

[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])

NumPy 中的数组打印为单词 array 后跟结构,类似于嵌入式 Python 列表。让我们创建一个类似的列表:

>>> l = [[[ 0.,  0.,  0.,  0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],

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

>>> l
[[[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.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]]

这个复合列表的第一级 l 正好有 2 个元素,就像数组 a 的第一个维度(行数)一样。这些元素中的每一个本身都是一个包含 3 个元素的列表,等于 a 的第二维(列数)。最后,最嵌套的列表每个都有 4 个元素,与 a 的第三维(深度/颜色数)相同。

所以你得到了与 Matlab 中完全相同的结构(在尺寸方面),只是以另一种方式打印。

一些注意事项:

  1. Matlab 逐列存储数据(“Fortran 顺序”),而 NumPy 默认逐行存储数据(“C 顺序”)。这不会影响索引,但可能会影响性能。例如,在 Matlab 中,高效循环将在列上进行(例如 for n = 1:10 a(:, n) end),而在 NumPy 中,最好对行进行迭代(例如 for n in range(10): a[n, :] -- 注意 n 在第一个位置,而不是最后一个)。

  2. 如果您在 OpenCV 中使用彩色图像,请记住:

    2.1。它以 BGR 格式存储图像,而不是像大多数 Python 库那样以 RGB 格式存储图像。

    2.2。大多数函数适用于图像坐标(x, y),与矩阵坐标(i, j)相反。

关于python - numpy中的3维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com