<pre><code>np.sum(A>B.reshape((-1,1)), axis=1)
</code></pre>
<p><strong>解释</strong></p>
<p>需要了解<a href="https://numpy.org/doc/stable/user/basics.broadcasting.html" rel="nofollow noreferrer">broadcasting</a>并为此进行重塑。通过将B重塑为shape(len(B),1),它可以与A一起广播以生成包含所有比较的shape(len(B),len(A))的数组。然后在轴1上求和(沿A)</p>
<p>换句话说,<code>A < B</code>不起作用,因为<code>A</code>有100个条目,而B有10个条目。如果您阅读<a href="https://numpy.org/doc/stable/user/basics.broadcasting.html#general-broadcasting-rules" rel="nofollow noreferrer">broadcasting rules</a>,您将看到numpy将从最后一个维度开始,如果它们的大小相同,那么它可以一对一进行比较。如果这两个维度中的一个是<code>1</code>,则此维度将被<em>拉伸或“复制”以匹配另一个</em>。如果它们不相等,并且没有一个等于<code>1</code>,则失败</p>
<p>举一个简短的例子:</p>
<pre><code>A = np.array([0.5112744 , 0.21696187, 0.14710105, 0.98581087, 0.50053359,
0.54954654, 0.81217522, 0.50009166, 0.42990167, 0.56078499])
B = array([0.25, 0.5 , 0.75])
</code></pre>
<p><code>(A>B.reshape((-1,1)))</code>的转置(为了可读性)</p>
<pre><code>np.array([[ True, True, False],
[False, False, False],
[False, False, False],
[ True, True, True],
[ True, True, False],
[ True, True, False],
[ True, True, True],
[ True, True, False],
[ True, False, False],
[ True, True, False]])
</code></pre>
<p>而且{<cd6>}是</p>
<pre><code>array([8, 7, 2])
</code></pre>