我正在为大学进行机器学习项目,但无法在线理解一些代码。这是示例:
digits = np.loadtxt(raw_data, delimiter=",")
x_train, y_train = digits[:,:-1], digits[:,-1:].squeeze()
第二行中的切片是什么意思?我试图做一个切片,选择数组的前2/3,我之前用[:2*array_elements // 3]
之类的方法做过,但是如果有一半的分隔符,我不知道该怎么做。 / p>
答案 0 :(得分:0)
numpy(或其他任何东西,但是看起来像numpy)可以实现__getitem__
来接受元组,而不是stdlib所接受的,在stdlib中,仅接受标量值(afaik)(例如,整数,字符串,切片对象)。 / p>
您要按照,
定界符分别查看切片“部分”。因此[:,:-1]
实际上是:
,而:-1
是完全独立的。
第一片
:
是“全部”,沿该轴没有切片。
:x
全部用完,直到(且不包括)x
并且-1
表示最后一个元素,所以...
:-1
一直到(但不包括)最后一个。
第二个切片
x:
紧随x
之后,我们已经知道-1
,所以...
-1:
仅在最后一个之后(包括最后一个),在这种情况下,就是最后一个。
答案 1 :(得分:0)
这里涉及两种机制。
切片数组的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]]
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