我尝试使用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长度相同的元组。只有第一个省略号是
展开后,任何其他项都解释为:。
因此,在您的示例中,evecsndim等于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/

10-11 18:30