【问题标题】:Tuple of colons in ndarray slicingndarray切片中的冒号元组
【发布时间】:2019-01-29 17:30:22
【问题描述】:

在 NumPy documentation 中,我们在开头看到一个注释:

在 Python 中,x[(exp1, exp2, ..., expN)] 等价于 x[exp1, exp2, ..., expN];后者只是前者的语法糖。

为什么 x[(:,:)] 不能代替 x[:,:] 工作呢?例如,如果需要连接切片,则必须使用 a[(0,) + (slice(None),)] 而不是 a[(0,) + (:,)]

【问题讨论】:

  • Welcome to SO :) 请提供一些代码示例,这样回答起来会更直接,我猜:, 的用法可能有些混乱
  • 谢谢,@AndriyIvaneyko!这是示例:让v = np.arange(24); v.shape = (2,3,4)。然后 v[1,0,:] 照常工作,而 v[(1,0,:)] 产生 SyntaxError。

标签: python indexing slice numpy-ndarray


【解决方案1】:

正如变量exp1, exp2, ... expN 的名称所暗示的那样,这仅适用于表达式。但是,: 本身并不是一个表达式,所以(:,) 是一个语法错误,因为冒号符号只能用于这种意义上的索引。

【讨论】:

  • 感谢您的回答,@ForceBru。但是,例如呢? v[ 0, 2, 0:3:2 ] 有效,v[(0, 2, 0:3:2)] 导致 SyntaxError
  • 我想我是这样理解的:首先,解释器试图理解一个元组 (:, ),其中冒号本身 或像 start:stop:step 这样的任何表达式都不会感觉。
  • @VladimirBaturin,对,在第一种情况下,冒号只是构建slice 类型对象的语法糖。但是,此构造仅在执行某种索引时才有效,在像第二个示例中那样构造元组时没有意义。
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 2021-11-17
  • 2016-11-07
  • 2013-06-25
  • 1970-01-01
  • 2014-02-07
  • 2019-10-29
  • 1970-01-01
相关资源
最近更新 更多