逗号指数在Python列表支架

问题描述 投票:0回答:2

例子如下。这是什么?逗号是在Python列表支架。我该如何理解?

id(x[i,j]) == id(x[i][j])显示真。

所以,x[i,j]总是在同一x[i][j]

或者,x[i,j]x[(i,j)]其实一样吗?指数是元组。

import numpy as np
x = np.random.random((64,3,32,10))
for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        print(x[i,j])

====== 我想这是numpy的特殊实现。 NumPy的覆盖使用的元组指数“_getitem__”功能。

我试了 1)基本蟒 2)覆盖 “_getitem__” 和 3)基本numpy的。

1)示出错误。 “类型错误:列表索引必须是整数或片,而不是元组” 2)已....没有问题,如果我实现的权利。 3)只是效果很好。

所以,我想numpy的开发商并实施了他们的元组 “的GetItem” 功能,它的工作原理相同编曲[X,Y,Z] == ARR [X] [Y] [Z]。

python
2个回答
2
投票

虽然numpy的行为以同样的方式与两个,他们在技术上的不同。

您可以通过实现__getitem__自己看到了差距:

class GetitemTest(object):
    def __getitem__(self, item):
        print("getting: %r" %(item, ))
        return self

然后:

>>> x = GetitemTest()
>>> x[1,2]
getting: (1, 2)
<__main__.GetitemTest object at 0x10bb6d810>

>>> x[1][2]
getting: 1
getting: 2
<__main__.GetitemTest object at 0x10bb6d810>

请注意,x[1,2]仅调用__getitem__一次,但x[1][2]调用它的两倍。


0
投票

这是NumPy的特殊能力。 Numpy official docs “不像列表和元组,numpy的阵列支持多维索引多维数组,这意味着它是没有必要每个维度的指标分成了自己的一套方括号。”

>>> x.shape = (2,5) # now x is 2-dimensional
>>> x[1,3]
8
>>> x[1,-1]
9
© www.soinside.com 2019 - 2024. All rights reserved.