我试图复制一个numpy数组的一个子集(做图像背景减法-但这是按比例)。我不明白下面的错误是什么-我以交互方式演示了它,因为你真的不想费力地浏览我所有的代码。。。在
>>> from numpy import zeros
>>> a = zeros((5,5,3), 'uint8')
>>> print a.shape
(5, 5, 3)
>>> b = a[1:2][1:2][:].copy()
>>> print b.shape
(0, 5, 3)
>>> print a[1:2][1:2][:].shape
(0, 5, 3)
>>> print a.shape
(5, 5, 3)
>>>
我想要的是b.shape返回(2,2,3)-并在接下来的操作中以这种方式进行操作。我肯定我做了一些非常明显的错误,但我不知道是什么。如有任何建议,不胜感激!在
我相信你是说}。在
a[1:3, 1:3, :]
而不是{而且,
a[1:3, 1:3, ...]
也可以(...
意思是“根据需要尽可能多的:
”)。NumPy似乎也允许a[1:3, 1:3]
。在解释分为两部分:
Python中的切片是左包含和右独占的
这里需要逗号索引,}将再次切片第一个维度。在
a[1:3]
给你一个形状(2,5,3)
,另一个{对于简单索引,}相同,因为每个连续的索引删除一个维度。但是,这不适用于切片-您需要使用逗号。
a[1][2][3]
与{你所做的有两个不同的问题。主要的问题是如何在numpy中处理索引。Numpy矩阵有自己的语法,比您使用的列表语法要清楚得多。。。在括号中使用逗号而不是单独的索引:
相反,您所做的是失败的,因为[1:2]仍然返回列表列表,所以您的下一个索引是外部列表(只有一个元素)上的索引,而不是您想要的内部列表:
^{pr2}$(如果使用简单索引而不是切片,则不会出现此问题,但仍应使用逗号语法,因为它更清晰。在
第二,你用错了切片。切片的第一个值是所需数组的第一个值的索引,索引从0开始。第二个值比所需数组的索引多1个。这使得
a[first_index:second_index]
返回second_index-first_index
点。所以,你想要这样的东西:您的索引
[1:2]
将只返回一个元素。。。名单上的第二个。在另外,作为补充说明,
.copy()
在这里是多余的,因为从numpy数组获取切片已经创建了一个新对象。在相关问题 更多 >
编程相关推荐