您有一个截断的数组表示。让我们看一个完整的例子:
>>> 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嵌套列表,使用单词 array
跟随结构体进行展示。让我们创建一个相似的列表:
>>> 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
)相反。