[pymvpa] Mask in from_wizard generates no data.

Thomas Nickson thomas.nickson at gmail.com
Wed Dec 10 16:16:32 UTC 2014


:O My hero. It works!

But then why does fmri_dataset work without this step?

On Wed, Dec 10, 2014 at 4:10 PM, Yaroslav Halchenko <debian at onerussian.com>
wrote:

>
> On Wed, 10 Dec 2014, Thomas Nickson wrote:
>
> >    My main problem is that this isn't at all consistent with how the
> function
> >    for constructing fmri datasets works. Which way do you consider to be
> >    correct?
>
> I thought "correct way" is when mask dimensionality (be it a boolean
> array or tuple of indices) matches the dimensionality of the data
> array.  That is I think how all our functions work
>
> > I think the fmri way of handling it makes more sense. This way I
> >    have to understand that the mask needs to be flattened and I need to
> >    provide an array of nonzero indices.
>
> that is where you are loosing me ;)  why mask needs to be flattened?
>
> > The other way does not work. No other
> >    way works.A  I can't just provide a flattened boolean mask, if by
> that you
> >    mean 1's and 0's.
>
> I mean dtype=bool array of True and False's.  Array of indices 1 and 0
> is just that -- array of indicies ;)
>
> > I can't provide a mask of the same shape as the original
> >    data.
>
> that is what confuses me -- it must work.  looking back to our
> correspondence -- you never showed that dtype of your mask is bool...
> may be that is the catch?
>
> > This is confusing because the original data will be automatically
> >    flattened but the mask won't.
>
> confused
>
> > Why does that make any sense?
>
> dunno since it doesn't
>
> > Surely you
> >    would at least want the inputs to be consistent for the mask and the
> >    original data?
>
> yeah
>
> > It's neither consistent within the function itself nor is
> >    it consistent between other functions that do the same thing.
>
> hm... confused
>
> >    The fmri data provided for the tutorial does exactly the same thing.
> It
> >    hasn't got anything to do with the data. I can provide the code.
>
> oy--  lets check that hypothesis of mine about dtype of your mask first
>
> >    Anyway, I don't mean to non-constructively criticise but I found it
> >    confusing and frustrating and thought it might be nice to alleviate
> some
> >    of that.
> >    #Open the main VBM data - some functions to help
>
> >    import numpy as np
> >    import nibabel as nb
> >    import os
> >    from functools import partial
> >    from operator import mul
> >    import pickle as p
> >    from mvpa2.datasets.base import Dataset
> >    from mvpa2.mappers.zscore import zscore
> >    from mvpa2.datasets.mri import fmri_dataset
>
> >    """4ddata is fddata and 2ddata is tddata"""
>
> >    def getImages(imagePath):
> >    A A A  """load a nifti"""
> >    A A A  return nb.load(imagePath)
>
> >    def writeDatatoImages(writePath, Data):
> >    A A A  """Write a numpy array to a nifti1 image"""
> >    A A A  N = nb.Nifti1Image(Data, np.eye(4))
> >    A A A  N.to_filename(writePath)
>
> >    def getImageData(imagePath):
> >    A A A  """load a nifti as numpy data"""
> >    A A A  return getImages(imagePath).get_data()
> >    A A A
> >    def rotateShape(FDData):
> >    A A A  """we need to rotate the shape of the data as other wise the
> time
> >    dimension (here denoting the subjects) is actually last"""
> >    A A A  if len(FDData.shape) == 4:
> >    A A A A A A A  FDData = np.rollaxis(FDData, -1)
> >    A A A  return FDData
>
> >    def reshapeFlatten(FDData):
> >    A A A  """Reshape the data and then flatten each member of the
> array"""
> >    A A A  Data = rotateShape(FDData)
> >    A A A  return Data.reshape(Data.shape[0],reduce(mul,Data.shape[1:],1))
>
> >    #======================================Helper functions
> >    above=====================================
>
> >    DATA_LOCATION = ./pymvpa/PyMVPA/tutorial_data/data/bold.nii.gz'
>
> >    MASK = './pymvpa/PyMVPA/tutorial_data/data/mask_brain.nii.gz'
>
> >    #Load the metadata pickle
> >    #metaData = p.load(open('VBMMeta.pkl'))
>
> >    #get image data and reshape
> >    rotatedImageData = rotateShape(getImageData(DATA_LOCATION))
>
> >    #Get mask data
> >    mask =
> getImageData(MASK).flatten()#.nonzero()[0]#.flatten().nonzero()[0]
>
> just try
>
> getImageData(MASK).astype(bool)
>
> ?
>
> >    #mask = np.float32(mask)
> >    #print type(mask)
>
> >    #Load dataset
> >    ds = Dataset.from_wizard(rotatedImageData,
> >    mask=mask)#targets=metaData['diagnosesT1'], mask=mask)
> >    #ds = fmri_dataset(rotatedImageData)#,
> targets=metaData['diagnosesT1'],
> >    mask=mask)
> >    #ds = fmri_dataset(DATA_LOCATION, mask=mask)#,
> >    targets=metaData['diagnosesT1'], mask=mask,
> chunks=np.array(range(133)))
>
> >    #zscore normalise the data
> >    #zscore(ds, chunks_attr=None)
> --
> Yaroslav O. Halchenko, Ph.D.
> http://neuro.debian.net http://www.pymvpa.org http://www.fail2ban.org
> Research Scientist,            Psychological and Brain Sciences Dept.
> Dartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755
> Phone: +1 (603) 646-9834                       Fax: +1 (603) 646-1419
> WWW:   http://www.linkedin.com/in/yarik
>
> _______________________________________________
> Pkg-ExpPsy-PyMVPA mailing list
> Pkg-ExpPsy-PyMVPA at lists.alioth.debian.org
> http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-exppsy-pymvpa/attachments/20141210/1d65d3cc/attachment.html>


More information about the Pkg-ExpPsy-PyMVPA mailing list