在寻找合适的解决方案之后,发现那里的一切都很难使用。
a = [[0 0 1 1]
[1 1 1 1]
[0 0 1 0]
[1 1 1 1]]
b = [[0 0 1]
[1 1 1]]
那么如何获得上述数字(b中的数字),返回2。
答案 0 :(得分:0)
你不太清楚这个问题可能有的不同情况,比如重叠等,但是如果你只想从a
的行的开头检查交集并且不想将重叠的子阵列考虑在内这里是一个解决方案,它基于a
的形状分割b
:
In [22]: x_a, y_a = a.shape
In [23]: x_b, y_b = b.shape
In [24]: sum((b == arr).all() for arr in np.vsplit(a[:,:y_b], x_a//x_b))
Out[24]: 2
说明:
np.vsplit(a[:,:y_b], x_a//x_b)
将为y_b
中的每一行提供第一个a
项,基于相等x_a//x_b
大小的块进行拆分。
In [25]: np.vsplit(a[:,:y_b], x_a//x_b)
Out[25]:
[array([[0, 0, 1],
[1, 1, 1]]), array([[0, 0, 1],
[1, 1, 1]])]
sum
中的以下生成器表达式将为b
提供相等的子数组。
In [24]: sum((b == arr).all() for arr in np.vsplit(a[:,:y_b], x_a//x_b))
Out[24]: 2