【发布时间】:2016-01-05 02:32:29
【问题描述】:
我正在寻找一种在 numpy 中查找 3d 数组中外部特定行的索引的方法。一个示例是在 RBG 图像中查找给定颜色集的所有出现,并获取像素坐标。
这个question 表明in 运算符对数组的行为可能很奇怪,而这个one 更接近但适用于二维数组。
假设我们有一个维度为(x,y,z) 的3d 数组Z,以及我们想要匹配的第三维度行[s0, s1]。
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 或s1。
到目前为止,
argwhere 返回 s0 中的一个元素在 Z 中的每个匹配项:
> np.argwhere(s0 == Z)
array([[1, 2, 0],
[1, 2, 1],
[1, 2, 2]])
in1d 返回一个布尔型一维数组,其中 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。
有什么想法吗?
【问题讨论】: