了解python中的数组切片

时间:2018-12-06 22:55:55

标签: python numpy

我正在为大学进行机器学习项目,但无法在线理解一些代码。这是示例:

digits = np.loadtxt(raw_data, delimiter=",")
x_train, y_train = digits[:,:-1], digits[:,-1:].squeeze() 

第二行中的切片是什么意思?我试图做一个切片,选择数组的前2/3,我之前用[:2*array_elements // 3]之类的方法做过,但是如果有一半的分隔符,我不知道该怎么做。 / p>

2 个答案:

答案 0 :(得分:0)

numpy(或其他任何东西,但是看起来像numpy)可以实现__getitem__来接受元组,而不是stdlib所接受的,在stdlib中,仅接受标量值(afaik)(例如,整数,字符串,切片对象)。 / p>

您要按照,定界符分别查看切片“部分”。因此[:,:-1]实际上是:,而:-1是完全独立的。

第一片

:是“全部”,沿该轴没有切片。

:x全部用完,直到(且不包括)x并且-1表示最后一个元素,所以...

:-1一直到(但不包括)最后一个。

第二个切片

x:紧随x之后,我们已经知道-1,所以...

-1:仅在最后一个之后(包括最后一个),在这种情况下,就是最后一个。

答案 1 :(得分:0)

这里涉及两种机制。

  1. 切片数组的python符号:Understanding Python's slice notation

    基本上,语法为array[x:y],其中所得的条带以x(包括)开始,以y(排除)结束。 如果省略start(分别为end),则表示“从第一个项目开始”(从“到最后一个项目”)(这是一个快捷方式)。 而且符号是循环的:

    array[-1:0]
    # The elements between the last index - 1 and the first (in this order).
    # Which means the elements between the last index -1 and the last index
    # Which means a list containing only the last element
    array[-1:] = [array[-1]]
    
  2. numpy的2维数组(假设np用于numpy): Numpy经常使用二维矩阵,例如矩阵。因此,要访问第x行和第y列中的元素,您可以将其写为matrix[x,y] 另外,切片数组的python符号在这里也适用于将矩阵切片成较小尺寸的子矩阵

所以,回到您的问题上:

digits[:,:-1]
= digits[start:end , start:-1]
= digits[start:end , start:end-1]
= the sub-matrix where you take all the rows (start:end) and you take all the columns except the last one (start:end-1)

digit[:,-1:]
= digit[start:end, -1:start]
= digit[start:end, -1:end]
= sub-matrix with all the rows and only the last column