2016-02-10 136 views
3

当使用ellipsis...)来索引1-D ndarray时,我认为表达式X[0]X[..., 0]在语义上是相同的。然而,他们的字符串表现有所不同:对于1-D`X`,`X [n]`和`X [...,n]`有什么区别?

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-d数组。 –

回答

4

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

X[...,0]返回0维numpy数组。
当你说X[...,0],你告诉python给你沿索引0沿X排列的最后一个轴的项目。

+2

嗯。这并不是真正意义上的......。在'X [...,0]'中,你指定你只对'X'的* last *轴索引'0'感兴趣,但是对于所有前面的轴,你正在使用全部范围的指数。如果你在二维数组上试试这个,你会看到'X [...,0]'给你一个1d的结果。 –

+0

是的,我说错了。你击中了要害。 –

相关问题