【问题标题】:What does this Slicing and Ellipse index operations result in?这个 Slicing 和 Ellipse 索引操作会导致什么结果?
【发布时间】:2013-12-30 17:02:37
【问题描述】:

我尝试使用 ndarrays 了解这段代码会发生什么:

max_evecs = evecs[..., :, 0]

其中 evecs 是 ndarray 类型。到目前为止,我知道 ':' 是一个切片运算符,而 '...' 是一个所谓的椭圆。到目前为止,':' 表示所有元素,而 '...' 表示需要的元素。我调查了形状的数组:

>>> max_evecs.shape
(128, 128, 72)
>>> evecs.shape
(128, 128, 72, 3)

我可以想象,它试图将 3D 数组转换为三元组 (x,y,z) 数组。但我不确定。

对于那些关心的人:它来自 dipy 软件包:函数 quantize_evecshttps://github.com/nipy/dipy/blob/ff75b192f694cdb62cc11310159cdb652ce62073/dipy/reconst/dti.py 1663 附近的行

【问题讨论】:

  • 如果您只是想获得整个数组的句柄(例如,为了在 for 循环中赋值),您可以使用 A[:]A[...]

标签: python arrays numpy indexing operators


【解决方案1】:

来自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, ...] 和类似的,看看它们是如何相关的。

【讨论】:

  • 我查看了文档,那里有一个x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),然后运行:x[...,0] 这应该会导致array([[1, 2, 3],[4, 5, 6]]) 但是我在这个例子中得到array(0)。这对我来说没有意义。
  • 在本例中,x.ndim 为 1。因此,x[..., 0]x[0] 相同(指定 0 后没有剩余尺寸/轴)。
  • here 的另一种解释。省略号的意思是“此时,插入尽可能多的完整切片 (:) 以将多维切片扩展到所有维度。”
  • 谢谢大家。 python 文档,只是使用了另一个比我想象的 x 数组:x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
猜你喜欢
  • 2013-07-10
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2012-02-16
  • 2011-01-10
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多