Nathan,<br><br>In Matlab and some C++ libraries, I&#39;ve used the following &quot;sparse division&quot; functionality :<br><br>When you attempt to divide one sparse matrix by another of the same size, return the result of elementwise division of the entries in the matrices. This assumes that the two input matrices have the same sparsity structure.&nbsp; 
<br><br>This is useful when implementing some algorithms like NMF using sparse matrices.&nbsp; Right now in scipy, only division of a sparse matrix by a scalar is supported.&nbsp; <br><br>If you look at sparse.py in trunk:<br><br>206 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; def __truediv__(self, other):
<br>207 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if isscalarlike(other):<br>208 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return self * (1./other)<br>209 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>210 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise NotImplementedError, &quot;sparse matrix division not yet supported&quot;<br>
211 &nbsp;&nbsp;&nbsp; <br>212 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; def __div__(self, other):<br>213 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Always do true division<br>214 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if isscalarlike(other):<br>215 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return self * (1./other)<br>216 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>217 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise NotImplementedError, &quot;sparse matrix division not yet supported&quot;
<br><br><br><br>Here is a c implementation of sparse matrix division (mex file which is called from matlab ... sorry about the formating):<br><br>source:<br><br><a href="http://journalclub.mit.edu/jclub/message?com_id=2;publication_id=21;message_id=58;session_id=2E87004B582D814FFB7D7DC3E64C3789;seq_no=54958">
http://journalclub.mit.edu/jclub/message?com_id=2;publication_id=21;message_id=58;session_id=2E87004B582D814FFB7D7DC3E64C3789;seq_no=54958</a><br><br><p>/*
  spdotdiv.c
  c = spdotdiv(a,b)
  Performs matrix element division c=a./b, but
  evaluated only at the sparse locations.
  (a and b must have same sparcity structure).
*/</p>

<p>#include &quot;mex.h&quot;
#include &lt;string.h&gt;
#include &lt;math.h&gt;<br>#define C (plhs[0])
#define A (prhs[0])
#define B (prhs[1])</p>







<p>void mexFunction( int nlhs, mxArray *plhs[],
                  int nrhs, const mxArray *prhs[] )
{
  int m, n, nzmax, nnz;
  int i;
  double *apr, *bpr, *cpr;<br>if (nrhs != 2)
    mexErrMsgTxt(&quot;Two input arguments required.&quot;);
  if (!mxIsSparse(A) || !mxIsSparse(B))
    mexErrMsgTxt(&quot;Input arguments must be sparse.&quot;);<br>m = mxGetM(A);
  n = mxGetN(A);
  nzmax = mxGetNzmax(A);
  nnz = *(mxGetJc(A)+n);<br>if ((mxGetM(B) != m) || (mxGetN(B) != n) || (mxGetNzmax(B) != nzmax))
    mexErrMsgTxt(&quot;Input matrices must have same sparcity structure.&quot;);<br>apr = mxGetPr(A);
  bpr = mxGetPr(B);<br>if ((C = mxCreateSparse(m,n,nzmax,mxREAL)) == NULL)
    mexErrMsgTxt(&quot;Could not allocate sparse matrix.&quot;);
  cpr = mxGetPr(C);<br>memcpy(mxGetIr(C), mxGetIr(A), nnz*sizeof(int));
  memcpy(mxGetJc(C), mxGetJc(A), (n+1)*sizeof(int));<br>for (i=0; i&lt;nnz; i++)
    cpr[i] = apr[i]/bpr[i];</p>
<p>}</p>Let me know what you think,<br><br>-Pete<br><br><div><span class="gmail_quote">On 7/9/07, <b class="gmail_sendername">Nathan Bell</b> &lt;<a href="mailto:wnbell@gmail.com">wnbell@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 7/7/07, Peter Skomoroch &lt;<a href="mailto:peter.skomoroch@gmail.com">peter.skomoroch@gmail.com</a>&gt; wrote:<br>&gt; Nathan,<br>&gt;<br>&gt; Do you have any plans to implement sparse matrix division?&nbsp;&nbsp;That is<br>&gt; something I&#39;ve found lacking in the sparse matrix support...
<br><br>Sorry, I&#39;m not sure what you mean by sparse matrix division.&nbsp;&nbsp;Can you elaborate?<br><br>--<br>Nathan Bell <a href="mailto:wnbell@gmail.com">wnbell@gmail.com</a><br>_______________________________________________
<br>Scipy-dev mailing list<br><a href="mailto:Scipy-dev@scipy.org">Scipy-dev@scipy.org</a><br><a href="http://projects.scipy.org/mailman/listinfo/scipy-dev">http://projects.scipy.org/mailman/listinfo/scipy-dev</a><br></blockquote>
</div><br><br clear="all"><br>-- <br>Peter N. Skomoroch<br><a href="mailto:peter.skomoroch@gmail.com">peter.skomoroch@gmail.com</a><br><a href="http://www.datawrangling.com">http://www.datawrangling.com</a>