如何解决如何使用numpy.where查找条件复杂的索引?
# A JPG for example with RGB
x = np.zeros(shape=[5,5,3])
x[1,1] = np.array([1,2,3])
def rgb_equals(a,b,tolerance=0):
return np.max(np.absolute(np.subtract(a,b))) <= tolerance
我看过这个StackOverflow示例: Numpy.where uses
numpy.nonzero(numpy.all(x == (1,1,1),axis=1))[0]
但这只是做一个简单的'=='。
较复杂的rgb_equals怎么样?
我知道我需要创建一个布尔数组以传递到numpy.where,但是StackOverflow示例仅比示例简单(小于/大于):Creating a boolean array by testing if each element in numpy array is between 2 numbers
谢谢!
解决方法
In [82]: x = np.zeros(shape=[5,5,3])
...: x[1,1] = np.array([1,2,3])
...:
In [83]: x
Out[83]:
array([[[0.,0.,0.],[0.,0.]],[[0.,[1.,2.,3.],# the nonzero pixel
[0.,0.]]])
寻找非零像素:
In [84]: x==[1,3]
Out[84]:
array([[[False,False,False],[False,False]],[[False,[ True,True,True],# the pixel
[False,False]]])
In [85]: (x==[1,3]).all(axis=2)
Out[85]:
array([[False,# the pixel
[False,False]])
为此使用nonzero
In [86]: np.nonzero((x==[1,3]).all(axis=2))
Out[86]: (array([1]),array([1]))
In [87]: x[np.nonzero((x==[1,3]).all(axis=2))]
Out[87]: array([[1.,3.]])
寻找该像素的其他方法:
完全匹配:
In [95]: np.linalg.norm(x-[1,3],axis=2)
Out[95]:
array([[3.74165739,3.74165739,3.74165739],[3.74165739,3.74165739]])
但与[1,1,1]的匹配不是很好:
In [96]: np.linalg.norm(x-[1,1],axis=2)
Out[96]:
array([[1.73205081,1.73205081,1.73205081],[1.73205081,2.23606798,1.73205081]])
或
In [98]: np.max(np.abs(x-[1,3]),axis=2)
Out[98]:
array([[3.,3.,[3.,3.]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。