我遇到了一个代码片段,其中有两个语句我无法理解,但我可以看到每个语句的最终结果。你知道吗
在给出以下语句之前,我将创建一个变量:
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
进行切片意味着什么?你知道吗
对于上面的两个语句,以及如何读取每个语句,有一个替代方法会很有帮助,这样我就能更好地理解它。你知道吗
Python的优势之一是它对简单原则的统一应用。Numpy索引与Python中的所有索引一样,将单个参数传递给索引对象的(即,数组的)
__getitem__
方法,Numpy数组是切片机制的主要理由之一(或者至少是其早期用途之一)。你知道吗当我试图理解新的行为时,我喜欢从一个具体的、可理解的例子开始,所以我将从一个一维的4元素向量开始,直到3x4,这个向量应该足够大,可以理解发生了什么。你知道吗
解释器将这些显示为
表达式
simple[x]
等价于(也就是说解释器最终执行)simple.__getitem__(x)
在引擎盖下-注意这个调用只接受一个参数。你知道吗numpy数组的
__getitem__
方法非常简单地用整数实现索引:它从第一个维度选择一个元素。所以simple[1]
就是2
,train[1]
就是array([5, 6, 7, 8])
。你知道吗当
__getitem__
收到一个元组作为参数时(这是Python语法解释像array[x, y, z]
这样的表达式的方式),它将元组的每个元素作为索引应用于索引对象的连续维度。因此result = train[1, 2]
与当然,我们发现
result
出现在7
。你可以认为array[x, y, z]
等同于array[x][y][z]
。你知道吗现在我们可以在混合料中加入切片。包含冒号的表达式可以被视为切片文本(我没有看到更好的名称),解释器为它们创建slice objects。如文档所述,slice对象主要是包含三个值的容器,start、stop和slice,并且取决于每个对象的
__getitem__
方法如何解释它们。您可能会发现this question有助于进一步理解切片。你知道吗根据你现在所知道的,你应该能够理解第一个问题的答案。你知道吗
将调用
train.__getitem__
和一个两元素的切片元组。这相当于第一条语句可以读作“set
temp
到train
的最后一行以外的所有列”,第二条语句可以读作“setresult
到temp
的第一列和最后一列以外的所有列”。train[:-1]
是将
[1:-1]
下标应用于该数组的第二维temp
下标第一维度上的省略号表示“传递一切”,因此the subscript expression
[…]can be considered equivalent to
[:]. As far as the
无values are concerned, a slice has a maximum of three data points: _start_, _stop_ and _step_. A
无value for any of these gives the default value, which is
0for _start_, the length of the indexed object for _stop_, and
1for _step. So
x[无:无:无]is equivalent to
x[0:len(x):1]which is equivalent to
x[::]`。你知道吗有了这些知识,你应该有更多的机会了解正在发生的事情。你知道吗
相关问题 更多 >
编程相关推荐