这可能是一个微不足道的问题,但我找不到一个不涉及大量 AND a.setid || ''= 'SHARE'
AND b.setid || ''= 'SHARE'
- 循环的解决方案。
我有一个多维数组(图像,所以for
),我想找到具有一些rgb值的元素的索引。
使用(h,w,3)
运算符或==
函数执行逐元素运算,因此如果我的rgb元组为np.where
并且我将其与{{1}进行比较它会产生(0,0,255)
,而整体颜色不一样,我想要的只是(0,0,0)
。换句话说,我正在寻找一个比较元组而不是单个值的运算符。
显然,这可以通过双for循环和(True, True, False)
运算符轻松完成,例如:
False
或循环中的这个:
.all()
但是我正在寻找一个单行,在for i in range(xx.shape[0]):
for j in range(xx.shape[1]):
(xx[i,j,:] == (5,5,5)).all()
的行中,但第三轴是全局匹配而不是元素。
答案 0 :(得分:0)
您可以按元素进行比较,然后沿第三轴使用all
:
(xx == (5, 5, 5)).all(axis=2)
要获取索引,您可以使用np.where
:
np.where((xx == (5, 5, 5)).all(axis=2))
例如:
>>> xx = np.array([[[1, 2, 3], [5, 5, 5]],
... [[1, 2, 3], [4, 5, 6]]])
>>> (xx == (5, 5, 5)).all(axis=2)
array([[False, True],
[False, False]], dtype=bool)
>>> np.where((xx == (5, 5, 5)).all(axis=2))
(array([0], dtype=int64), array([1], dtype=int64))
如果您不习惯使用all
并以此方式广播,您还可以明确比较这些值:
>>> (xx[..., 0] == 5) & (xx[..., 1] == 5) & (xx[..., 2] == 5)
array([[False, True],
[False, False]], dtype=bool)