对于一维数组 `X`,`X[n]` 和 `X[..., n]` 有什么区别?

3

当使用省略号 (...) 对 1-D 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中相等,为什么它们有不同的字符串表示形式?

1
正如@CharlieHaley所说,不同的字符串表示是因为其中一个给出了标量,而另一个则是0维NumPy数组。但我不知道为什么“...”会导致0维数组。 - Mark Dickinson
1个回答

4

X[0] 返回一个 numpy.int64 对象。
当你说 X[0] 时,你是在告诉 Python 给你数组 X 中索引为 0 的对象。

X[...,0] 返回一个零维的 numpy 数组。
当你说 X[...,0] 时,你是在告诉 Python 给你数组 X 最后一维中索引为 0 的所有项。


2
嗯,那不是...的真正含义。在X[..., 0]中,您指定您只对X最后一个轴的索引0感兴趣,但对于所有前面的轴,您都要取索引的完整范围。如果您在2d数组上尝试此操作,您将看到X[..., 0]会给您一个1d结果。 - Mark Dickinson
是的,我表达不正确。你说的很对。 - Charlie Haley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接