切片:1和无每个语句是什么意思?

2024-04-24 01:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个代码片段,其中有两个语句我无法理解,但我可以看到每个语句的最终结果。你知道吗

在给出以下语句之前,我将创建一个变量:

train = np.random.random((10,100))

其中一个读作:

train = train[:-1, 1:-1]

这个切片是什么意思?怎么读这个?我知道切片中的-1表示从后面。但我不能理解。你知道吗

另一项声明如下:

la = [0.2**(7-j) for j in range(1,t+1)]
np.array(la)[:,None]

[:,None]中使用None进行切片意味着什么?你知道吗

对于上面的两个语句,以及如何读取每个语句,有一个替代方法会很有帮助,这样我就能更好地理解它。你知道吗


Tags: 方法代码innone声明fornp切片
1条回答
网友
1楼 · 发布于 2024-04-24 01:28:40

Python的优势之一是它对简单原则的统一应用。Numpy索引与Python中的所有索引一样,将单个参数传递给索引对象的(,数组的)__getitem__方法,Numpy数组是切片机制的主要理由之一(或者至少是其早期用途之一)。你知道吗

当我试图理解新的行为时,我喜欢从一个具体的、可理解的例子开始,所以我将从一个一维的4元素向量开始,直到3x4,这个向量应该足够大,可以理解发生了什么。你知道吗

simple = np.array([1, 2, 3, 4])

train = np.array([[1, 2, 3, 4],
                   [5, 6, 7, 8],
                   [9, 10, 11, 12]])

解释器将这些显示为

array([1, 2, 3, 4])

array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

表达式simple[x]等价于(也就是说解释器最终执行)simple.__getitem__(x)在引擎盖下-注意这个调用只接受一个参数。你知道吗

numpy数组的__getitem__方法非常简单地用整数实现索引:它从第一个维度选择一个元素。所以simple[1]就是2train[1]就是array([5, 6, 7, 8])。你知道吗

__getitem__收到一个元组作为参数时(这是Python语法解释像array[x, y, z]这样的表达式的方式),它将元组的每个元素作为索引应用于索引对象的连续维度。因此result = train[1, 2]

temp = train[1]    # i.e. train.__getitem__(1)
result = temp[2]   # i.e. temp.__getitem__(2)

当然,我们发现result出现在7。你可以认为array[x, y, z]等同于array[x][y][z]。你知道吗

现在我们可以在混合料中加入切片。包含冒号的表达式可以被视为切片文本(我没有看到更好的名称),解释器为它们创建slice objects。如文档所述,slice对象主要是包含三个值的容器,startstopslice,并且取决于每个对象的__getitem__方法如何解释它们。您可能会发现this question有助于进一步理解切片。你知道吗

根据你现在所知道的,你应该能够理解第一个问题的答案。你知道吗

result = train[:-1, 1:-1]

将调用train.__getitem__和一个两元素的切片元组。这相当于

temp = train[:-1]
result = temp[..., 1:-1]

第一条语句可以读作“settemptrain的最后一行以外的所有列”,第二条语句可以读作“setresulttemp的第一列和最后一列以外的所有列”。train[:-1]

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

[1:-1]下标应用于该数组的第二维

array([[2, 3],
       [6, 7]])

temp下标第一维度上的省略号表示“传递一切”,因此the subscript expression[…]can be considered equivalent to[:]. As far as thevalues are concerned, a slice has a maximum of three data points: _start_, _stop_ and _step_. Avalue for any of these gives the default value, which is0 for _start_, the length of the indexed object for _stop_, and1 for _step. Sox[无:无:无]is equivalent tox[0:len(x):1]which is equivalent tox[::]`。你知道吗

有了这些知识,你应该有更多的机会了解正在发生的事情。你知道吗

相关问题 更多 >