我尝试使用ndarrays了解此代码的情况:
max_evecs = evecs[..., :, 0]
如果EVEC是ndarray类型。到目前为止,我知道“:”是一个切片运算符,“…”是一个所谓的椭圆。到目前为止,“:”表示所有元素,“…”表示所需的所有元素。我调查了阵列的形状:
>>> max_evecs.shape
(128, 128, 72)
>>> evecs.shape
(128, 128, 72, 3)
我可以想象,它试图将一个3D数组转换成一个三元组数组(x,y,z)。但我不确定。
对于那些关心的人:它来自dipy软件包:功能
quantize_evecs
内部https://github.com/nipy/dipy/blob/ff75b192f694cdb62cc11310159cdb652ce62073/dipy/reconst/dti.py行1663左右 最佳答案
从http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
省略号扩展到:进行选择所需的对象数
与x.ndim长度相同的元组。只有第一个省略号是
展开后,任何其他项都解释为:。
因此,在您的示例中,evecs
的ndim
等于4,并且以下是等效的:
evecs[..., :, 0]
evecs[:, :, :, 0]
以互动的方式尝试一些东西也很有帮助。使用一些简单的数据,例如
a = np.random.rand(3, 3, 2)
,尝试打印出a
和它的不同部分,比如a[..., 0]
和a[1, ...]
以及类似的部分,并查看它们之间的关系。关于python - 切片和椭圆索引操作会产生什么结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20540892/