[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