1

我的 R 脚本加载了一个 4 维数据集,它是 3D 医学图像的时间序列。我使用时间序列创建一个掩码,以排除在每个时间点具有值 0 的体素(3 维像素):

voxels[is.na(voxels)]=0;             # just get rid of unusable data
mask=rowSums(voxels,dims=3);         # 3D image that is the sum over time
mask=(mask!=0);                      # make binary

因此,要在我想要做的掩码内的索引处找到每个时间点的值:

indices=which(mask!=0);              # find the positions of nonzeroes in the mask
voxelsfound=voxels[indices];         # find the values in the images at those positions

但这给了

 > length(indices)
 [1] 20483
 > length(voxelsfound)
 [1] 20483

所以只有第一个时间点的结果。是否有类似的方法来制定它,以便它也返回其他时间点(我的想法是,voxelsfound=voxels[indices,]但它不起作用),还是只能使用 for 循环或类似的循环?

在 Python 中,我会做这样的事情(使用mformaskvfor voxels),使用该nonzero函数立即访问索引:

m = m.reshape(np.prod(m.shape));    
v = v.reshape(np.prod(m.shape),v.shape[3]);
v = v[:,np.nonzero(m)].squeeze(); 
4

1 回答 1

1

我相信您正在寻找的是:

mask <- which(rowSums(voxels, dims=3) != 0, arr.ind=T)
apply(voxels, 4, `[`, mask)
于 2018-07-05T00:19:34.070 回答