我正在寻找一种方法在numpy中查找3d数组中外部特定行的索引。一个例子是在RBG图像中找到一组给定颜色的所有出现,并获取像素坐标。在
这个question表明in
运算符在数组中的行为会很奇怪,这个one更接近于二维数组。在
假设我们有一个3d数组Z
,其维数为(x,y,z)
,而{
Z = np.zeros((10,20,3), dtype=int)
s0 = np.array([1,2,3])
s1 = np.array([4,5,6])
Z[1,2] = s0
Z[4,5] = s1
我想要所有(x,y)
,其中z
等于s0
或{
到目前为止,
argwhere
返回s0
中的一个元素在Z
中的每个匹配项:
in1d
返回布尔1D数组,其中s0或s1中的元素匹配:
> np.in1d(Z, [s0,s1])
如果我试着用疯狂的方式:
> Zravel = np.ascontiguousarray(a).view([('', a.dtype)] * a.shape[-1]).ravel()
> np.all(np.in1d(Zravel, [s0, s1]) == False)
所有元素都是False
。在
有什么想法吗?在
^{} 将展平其输入。因此,您可以给它提供},
Z
和{s1
的堆叠版本,给我们一个布尔数组,它可以被重塑成与Z
相同形状的数组。然后,您需要检查其中是否有匹配索引的所有真行。执行应该是这样的-您也可以使用^{} 来解决它,如下-
^{pr2}$如果希望将输出堆叠在数组中-
为了创建
S
,可以将np.row_stack
替换为np.concatenate
,这可能更快,如下-样本运行-
相关问题 更多 >
编程相关推荐