擅长:python、mysql、java
<p>如果我正确地理解了<code>A</code>和<code>B</code>,那么我就不理解<code>for</code>循环,以及为什么不只是乘以两个非零向量:</p>
<pre><code># say A & B are like this:
n, N = 3, 5
A = np.array( np.random.randn(N, N ) )
B = np.zeros_like( A )
B[ n ] = np.random.randn( N )
B[:, n] = np.random.randn( N )
</code></pre>
<p>取B的非零行和列:</p>
^{pr2}$
<p>将<code>A</code>乘以这两个向量:</p>
<pre><code>X = np.outer( A[:,n], rowb )
X[:,n] += np.dot( A, colb )
</code></pre>
<p>要验证检查:</p>
<pre><code>X - np.dot( A, B )
</code></pre>
<p>使用<code>N=100</code>:</p>
<pre><code>%timeit np.dot(A, B)
1000 loops, best of 3: 1.39 ms per loop
%timeit colb = np.copy( B[:,n] ); colb[ n ] = 0; X = np.outer( A[:,n], B[n,:] ); X[:,n] += np.dot( A, colb )
10000 loops, best of 3: 98.5 µs per loop
</code></pre>