【问题标题】:For 1-D `X`, what is the difference between `X[n]` and `X[..., n]`?对于一维`X`,`X[n]`和`X[..., n]`有什么区别?
【发布时间】:2016-05-21 06:08:48
【问题描述】:

当使用ellipsis (...) 来索引一维ndarray 时,我希望表达式X[0]X[..., 0] 在语义上是相同的。但是,它们的字符串表示形式不同:

In [522]: X = arange(5) 

In [523]: repr(X[0])                         
Out[523]: '0'

In [524]: repr(X[..., 0])
Out[524]: 'array(0)'

我找不到任何其他差异,实际上,根据array_equal,它们是相等的:

In [526]: array_equal(X[0], X[..., 0])
Out[526]: True

如果根据array_equal它们相等,为什么它们有不同的字符串表示?

【问题讨论】:

  • 正如@CharlieHaley 所说,不同的字符串表示是因为其中一个给你一个标量,另一个给你一个 0 维 NumPy 数组。不过,我不知道为什么 ... 会导致 0 维数组。

标签: python numpy ellipsis


【解决方案1】:

X[0] 返回一个numpy.int64 对象。
当您说X[0] 时,您是在告诉python 将数组X 中索引0 处的对象提供给您。

X[...,0] 返回一个 0 维 numpy 数组。
当您说X[...,0] 时,您是在告诉python 沿数组X 的最后一个轴为您提供索引0 处的项目。

【讨论】:

  • 嗯。这并不是... 的真正含义。在X[..., 0] 中,您指定您只对X最后一个 轴的索引0 感兴趣,但对于所有前面的轴,您将使用全部索引.如果您在二维数组上尝试此操作,您会看到 X[..., 0] 为您提供一维结果。
  • 是的,我的措辞不正确。你一针见血。
猜你喜欢
  • 2011-02-06
  • 1970-01-01
  • 2010-09-18
  • 2015-08-24
  • 2011-05-10
  • 2012-08-09
  • 2016-07-23
  • 2020-05-01
相关资源
最近更新 更多