: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 <[email protected]> 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 > [email protected] > http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa >
_______________________________________________ Pkg-ExpPsy-PyMVPA mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa

