【发布时间】:2019-06-14 19:39:51
【问题描述】:
我是 Numpy 和 OpenCV 的新手。我觉得奇怪的是 Numpy 数组只能用第一个维度的范围进行索引:
>>> import numpy
>>>
>>> a = numpy.zeros((3, 3), dtype=numpy.int8)
>>>
>>> i_range = range(3)
>>> j_range = range(3)
>>>
>>> print(i_range)
range(0, 3)
>>> print(j_range)
range(0, 3)
>>> print(a[i_range, j_range])
[0 0 0]
>>> print(a[0:3, 0:3])
[[0 0 0]
[0 0 0]
[0 0 0]]
>>> a[i_range, j_range] = numpy.ones((3,3), dtype=numpy.int8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: value array of shape (3,3) could not be broadcast to indexing result of shape (3,)
>>> a[0:3, 0:3] = numpy.ones((3,3), dtype=numpy.int8)
>>> a
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]], dtype=int8)
使用范围索引会返回一个长度为 3 的向量,使用全数索引会返回一个 3x3 数组。前者在给索引数组赋值时会报错,后者工作正常。
为什么会这样?
【问题讨论】: