如何在高维numpy中获得所有低维数量的numpy

时间:2018-03-24 16:23:50

标签: python python-3.x numpy

在寻找合适的解决方案之后,发现那里的一切都很难使用。

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。

1 个答案:

答案 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