擅长:python、mysql、java
<p>还没有测试詹姆的答案(再次感谢!),但我用cython实现了另一个同时有效的答案。在</p>
<p>文件sparse_mult_c.pyx:</p>
<pre><code># working from tutorial at: http://docs.cython.org/src/tutorial/numpy.html
cimport numpy as np
# Turn bounds checking back on if there are ANY problems!
cimport cython
@cython.boundscheck(False) # turn of bounds-checking for entire function
def sparse_mult_c(np.ndarray[np.float64_t, ndim=2] a,
np.ndarray[np.float64_t, ndim=2] b,
np.ndarray[np.int32_t, ndim=1] rows,
np.ndarray[np.int32_t, ndim=1] cols,
np.ndarray[np.float64_t, ndim=1] C ):
cdef int n = rows.shape[0]
cdef int k = a.shape[1]
cdef int i,j
for i in range(n):
for j in range(k):
C[i] += a[rows[i],j] * b[j,cols[i]]
</code></pre>
<p>然后按照<a href="http://docs.cython.org/src/userguide/tutorial.html" rel="nofollow">http://docs.cython.org/src/userguide/tutorial.html</a>编译它</p>
<p>然后在我的python代码中,我包括以下内容:</p>
^{pr2}$
<p>这是完全稀疏的,运行速度甚至比原来的(内存效率低)解决方案还要快。在</p>