您已截断数组表示形式。让我们来看看完整的例子:
>>> 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中一样,只是以其他方式打印。
一些注意事项。
Matlab的存储数据逐列( “Fortran的顺序”),而NumPy的默认存储它们逐行( “C命令”)。这不会影响索引,但可能会影响性能。例如,在Matlab中,高效循环将在列上(例如for n = 1:10 a(:, n) end
),而在NumPy中,优选遍历行(例如for n in range(10): a[n, :]
- 注意n
在第一位,而不是在最后)。
如果用彩色图像OpenCV的工作,请记住它:
2.1。像大多数Python库一样,以BGR格式存储图像而不是RGB。
2.2。大多数函数在图像坐标(x, y
)上工作,这与矩阵坐标(i, j
)相反。
好的,所以如果一切正常计算,我可以指望一个算法对于较小的矩阵以及大图像都一样吗?将第三维视为“深度”。这是有道理的,因为数学处理所有维度都是一样的。但是有什么办法可以让Numpy呈现正确吗?恐怕链接在这方面没有多大帮助:( – Vejto
Matlab和Numpy不以同样的方式处理图像,如果您使用的是OpenCV,那么它将图像表示为BGR而不是RGB,然后Matlab读取矩阵使用fortran所以你必须考虑所有这些事情时,将代码从matlab移植到numpy – jabaldonedo
好了,我尝试了一些东西,当然,正如你所说的。我知道BGR的演示文稿(它让我感到困惑,但我只是希望有一种方法可以“正确地”呈现它,现在,我将分别查看每个暗点,因为(对于3D矩阵e)显示e [:,:,1]正确的时候e [:,:, - 1]显示不合逻辑谢谢! – Vejto