+-
python – numpy中的三维数组
Python和Numpy的新手,尝试创建三维数组.我的问题是,与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导入图像颜色维度是最后一个维度,也就是说,我将颜色信息视为深度维度.如果我想做的就是在已知的较小的三维阵列上尝试某些东西,这会使事情变得非常复杂.

我误解了什么吗?如果没有,为什么使用这种不直观的3D维阵列工作方式会让人感到沮丧?

最佳答案
你有一个截断的数组表示.让我们看一个完整的例子:

>>> 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中的数组打印为单词数组,后跟结构,类似于嵌入式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完全相同的结构(在尺寸方面),只是以其他方式打印.

一些警告:

> Matlab逐列存储数据(“Fortran order”),而NumPy默认按行存储(“C order”).这不会影响索引,但可能会影响性能.例如,在Matlab中,有效循环将在列上(例如,对于n = 1:10 a(:,n)end),而在NumPy中,优选迭代行(例如,对于范围(10)中的n:a [n ,:] – 注意第一个位置的n,而不是最后一个位置.
>如果您在OpenCV中使用彩色图像,请记住:

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

2.2.大多数函数处理图像坐标(x,y),它们与矩阵坐标(i,j)相反.

点击查看更多相关文章

转载注明原文:python – numpy中的三维数组 - 乐贴网