I have the following code:
print(type(a1), a1.shape)
a2 = a1 #.reshape(-1,1,2) this solves my problem
print(type(a2), a2.shape)
输出结果如下:
<class 'numpy.ndarray'> (8, 1, 2)
<class 'numpy.ndarray'> (8, 2)
我知道(注释掉的)reshape 可以解决我的问题,但是我想了解为什么简单的赋值会导致数组失去中心维度。
有人知道发生了什么事吗?为什么使用另一个名称引用数组会改变其维度?
a2 = a1
会改变底层的NumPy数组对象。请问您能否发布完整的代码以重现您所看到的问题,同时附上您使用的任何库的版本?(我已经看到了您在Ajit的回答下面留下的opencv链接,但我无法准确地推断出这段代码与本问题的关系。) - Alex Rileycopy()
方法而失去维度,只有在特定的索引操作、显式重塑、沿轴缩减等情况下才会失去维度。在你提供的链接中,good_new
被赋值为p1
的索引结果,而p1
是cv.calcOpticalFlowPyrLK(..., p0, ...)
的输出,所以如果需要引入额外的维度,我并不感到惊讶。我认为你问题的前提是不正确的,所以我不确定该如何回答。 - Alex Rileygood_new
有一个中心维度,只需打印它即可。如果您在赋值语句上删除reshape
语句,p0
将会失去它。我也对此感到惊讶,但事实就是如此。干杯! - Tony Power