擅长:python、mysql、java
<p>注意,作为<a href="https://stackoverflow.com/a/19794741/190597">perimosocordiae shows</a>,从NumPy版本1.9开始,<code>np.linalg.norm(x, axis=1)</code>是计算二级规范的最快方法。</p>
<hr/>
<p>如果要计算二级规范,可以直接计算(使用<code>axis=-1</code>参数沿行求和):</p>
<pre><code>np.sum(np.abs(x)**2,axis=-1)**(1./2)
</code></pre>
<p>当然,Lp范数也可以类似地计算。</p>
<p>它比<code>np.apply_along_axis</code>快得多,尽管可能不太方便:</p>
<pre><code>In [48]: %timeit np.apply_along_axis(np.linalg.norm, 1, x)
1000 loops, best of 3: 208 us per loop
In [49]: %timeit np.sum(np.abs(x)**2,axis=-1)**(1./2)
100000 loops, best of 3: 18.3 us per loop
</code></pre>
<p>其他<code>ord</code>形式的<code>norm</code>也可以直接计算(具有类似的加速比):</p>
<pre><code>In [55]: %timeit np.apply_along_axis(lambda row:np.linalg.norm(row,ord=1), 1, x)
1000 loops, best of 3: 203 us per loop
In [54]: %timeit np.sum(abs(x), axis=-1)
100000 loops, best of 3: 10.9 us per loop
</code></pre>