python - numpy中的3维数组

标签 python numpy

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/

相关文章:

python - 计算沿轴的直方图

python - 如何访问pytest中的整体运行时?

python - 是否有更多方法来定义只有一项的元组?

python - 如何查询学生所在类(class)的文件?

python - python中将字符串与numpy数组中的格式化数字转换的最快方法是什么

python - 以 pythonic 方式填充 2D numpy 数组

python - 如何使用 ORM 进行相当于 SQL 计数、分组和连接查询?

python - Scikit-Learn 在 RFECV() 中手动指定 .max_features - 有多少特征得到排名?

python - 在对用户进行平均预测时附加标签信息

python - 如何使用 Orange 离散化存储在 numpy 数组中的数据?