aki*_*t90 5 python arrays numpy operators
如何在numpy数组上执行"in"操作?(如果给定的numpy数组中存在元素,则返回True)
对于字符串,列表和词典,功能直观易懂.
这是我在numpy数组上应用它时得到的结果
a
array([[[2, 3, 0],
[1, 0, 1]],
[[3, 2, 0],
[0, 1, 1]],
[[2, 2, 0],
[1, 1, 1]],
[[1, 3, 0],
[2, 0, 1]],
[[3, 1, 0],
[0, 2, 1]]])
b = [[3, 2, 0],
[0, 1, 1]]
b in a
True
#Aligned with the expectation
c = [[300, 200, 0],
[0, 100, 100]]
c in a
True
#Not quite what I expected
Run Code Online (Sandbox Code Playgroud)
您可以比较输入数组equality,它将对最后两个轴中每个位置的broadcasted所有元素a与第二个数组中相应位置的元素进行比较.这将产生一个布尔匹配数组,我们在其中检查ALL最后两个轴的ANY匹配,最后检查匹配,如下所示 -
((a==b).all(axis=(1,2))).any()
Run Code Online (Sandbox Code Playgroud)
样品运行
1)输入:
In [68]: a
Out[68]:
array([[[2, 3, 0],
[1, 0, 1]],
[[3, 2, 0],
[0, 1, 1]],
[[2, 2, 0],
[1, 1, 1]],
[[1, 3, 0],
[2, 0, 1]],
[[3, 1, 0],
[0, 2, 1]]])
In [69]: b
Out[69]:
array([[3, 2, 0],
[0, 1, 1]])
Run Code Online (Sandbox Code Playgroud)
2)广播的元素比较:
In [70]: a==b
Out[70]:
array([[[False, False, True],
[False, False, True]],
[[ True, True, True],
[ True, True, True]],
[[False, True, True],
[False, True, True]],
[[False, False, True],
[False, False, True]],
[[ True, False, True],
[ True, False, True]]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
3)ALL匹配最后两个轴并最终ANY匹配:
In [71]: (a==b).all(axis=(1,2))
Out[71]: array([False, True, False, False, False], dtype=bool)
In [72]: ((a==b).all(axis=(1,2))).any()
Out[72]: True
Run Code Online (Sandbox Code Playgroud)
根据类似于步骤c中a-
In [73]: c
Out[73]:
array([[300, 200, 0],
[ 0, 100, 100]])
In [74]: ((a==c).all(axis=(1,2))).any()
Out[74]: False
Run Code Online (Sandbox Code Playgroud)