今天重新看了下Nilearn关于数据导入的细节,我发现我之前的文章有1个错误,哈哈,现在相通了,不过我也不打算修改了,估计没人看我的文章,等有人发现了评论了我再修改。就当留给后人的一个彩蛋。
要想理解Nilearn的数据结构,就要回归到Nilearn的最开始的导入部分。我们知道,Nilearn最方便的就是定义了decoder以后,直接decoder.fit( X, Y )就可以了。但是这个X怎么来的呢?它的形式是怎么样的呢?那么问题还是回到了一开始的数据导入部分。
Nilearn的导入是分两种,3D和4D的图像。
对于3D的图像:
from nilearn import image
fileniigs = image.load_img( 'XX.nii' )
对于4D的图像:
file = image.load_img(['XX.nii', 'XXX.nii']) #导入4D
file = image.index_img('4d_XX.nii', o) #导入4D图像的第1层
for volume in image.iter_img( 'XX.nii' )
file = image.load_img(volume) # 遍历4D图像的每个单独体积
看到这里,相信聪明的人已经明白了我的意思。其实Nilearn只能输入3D图像(事实上基本所有的软件都只能输入3D图像),然后第4维是时间点,把时间点当成列表,这样就形成了decoder.fit的X,同理,对于多被试的静息态,其实多个被试就是时间点,也就是我强调的,机器学习里面的sample概念。
所以对于多个被试的静息态,输入的是单个被试的3D图像,例如zmap啊,reho啊之类的图像,然后用列表的形式把多个被试串起来,这样就可以decoder.fit了。
以上是总结的第一点,非常重要,这个方法掌握了,发文章就没问题了。
第二个就是对于正则式
之前我都是 import glob, 用glob.glob去正则式,这样可以,也能配上很强大的规则,但是对于简单的规则,事实上没必要用到glob,因为它可以直接直接使用*.nii这个方式去寻找文件,它本身已经融入了简单的正则式,这就非常方便了。
所以,了解了数据结构和导入方式,对于单个被试和多个被试的转换也就会了,那么举一反三,基本能灵活运用这个软件了。