[Neuroimaging] [dipy] connectivity_matrix

Jan Schreiber schreiber at cbs.mpg.de
Fri Aug 21 22:40:31 CEST 2015


Hi Bago,

very smart! :-)

Thanks,
Jan


On 08/21/2015 09:48 PM, Bago wrote:
> Hi Jan,
> 
> You're right in general the symmetric matrix is `M + M.T - diag(M)`, but
> in the two cases you've highlighted he have more information from
> context that allows us to simplify the operation.
> 
> First if you notice in the function itself, notice the part that says:
> 
>     if symmetric:
>         endlabels.sort(0)
> 
> This line re-orders the endpoints for each streamline to ensure that we
> get an upper triangular connectivity matrix. Because we know the matrix
> is upper triangular, `maximum(M, M.T) == M + M.T - diag(M)`
> 
> If you want to know why we do it this way, the goal here is to produce a
> mapping dictionary that is also "symmetric", but only has 1 reference to
> each streamline. From the docs:
> 
>         ``mapping[i, j]`` returns all the streamlines that connect
> region `i`
>         to region `j`. If `symmetric` is True mapping will only have one key
>         for each start end pair such that if ``i < j`` mapping will have key
>         ``(i, j)`` but not key ``(j, i)``.
> 
> As you're already noted, we know that the expected matrix is 0 along the
> diagonal so I just committed the ` - diag(M)` part.
> 
> Hope that clears things up, let me know if you have any other questions,
> Bago
> 
> On Fri, Aug 21, 2015 at 8:44 AM, Jan Schreiber <schreiber at cbs.mpg.de
> <mailto:schreiber at cbs.mpg.de>> wrote:
> 
>     Hi Dipy Experts,
> 
>     the function "connectivity_matrix()" provides the option to produce a
>     symmetric connectivity matrix.
>     The computation is done in line 202 in
>     https://github.com/nipy/dipy/blob/master/dipy/tracking/utils.py
> 
>     201  if symmetric:
>     202      matrix = np.maximum(matrix, matrix.T)
> 
>     The test of this function defines the expected matrix as
> 
>     100  expected = expected + expected.T
> 
>     I think the test might not be correct and it should be
> 
>     100  expected = expected + expected.T - np.diag(np.diag(expected))
> 
>     This does pop up as an error because the test does not include a
>     connection with start and end point in the same ROI. A within-ROI
>     connection produces an entry on the diagonal and would be counted twice
>     with "expected + expected.T".
> 
> 
>     A patch for an extended test is attached. I also added some more
>     combinations of possible connections.
> 
>     What keeps puzzling me is that the function that computes the
>     symmetry as
>       matrix = np.maximum(matrix, matrix.T)
>     gives the same result as
>       expected = expected + expected.T - np.diag(np.diag(expected))
> 
>     Cheers,
>     Jan
> 
> 
>     _______________________________________________
>     Neuroimaging mailing list
>     Neuroimaging at python.org <mailto:Neuroimaging at python.org>
>     https://mail.python.org/mailman/listinfo/neuroimaging
> 
> 
> 
> 
> _______________________________________________
> Neuroimaging mailing list
> Neuroimaging at python.org
> https://mail.python.org/mailman/listinfo/neuroimaging
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4852 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://mail.python.org/pipermail/neuroimaging/attachments/20150821/6ef810e8/attachment.bin>


More information about the Neuroimaging mailing list