推广Numpy切片Python

推广Numpy切片Python,python,python-3.x,numpy,numpy-slicing,Python,Python 3.x,Numpy,Numpy Slicing,我不知道如何推广numpy数组的切片。 请参见以下切片: x_train = data[:train_set_size,:-1,4:-1] x_valid = data[train_set_size:train_set_size+valid_set_size,:-1,4:-1] x_test = data[train_set_size+valid_set_size:,:-1,4:-1] y_train = data[:train_set_size,-1,-2:] y_valid = d

我不知道如何推广numpy数组的切片。 请参见以下切片:

x_train = data[:train_set_size,:-1,4:-1]    
x_valid = data[train_set_size:train_set_size+valid_set_size,:-1,4:-1]
x_test = data[train_set_size+valid_set_size:,:-1,4:-1]

y_train = data[:train_set_size,-1,-2:]
y_valid = data[train_set_size:train_set_size+valid_set_size,-1,-2:]
y_test = data[train_set_size+valid_set_size:,-1,-2:]
如您所见,
x
集被分为
:-1,4:-1
y
集为
-1,-2:
。如果我必须进行更改,那么我需要更改3次,而如果有一种方法可以将切片存储在变量中,只需更改变量即可反映更改

例如:
xset_slice=“:-1,4:-1”
yset_slice=“-1,-2:
。然后将其替换为:

x_train = data[:train_set_size,xset_slice ]    
x_valid = data[train_set_size:train_set_size+valid_set_size,xset_slice ]
x_test = data[train_set_size+valid_set_size:,xset_slice ]
y_train = data[:train_set_size,-1,-2:]
y_valid = data[train_set_size:train_set_size+valid_set_size,yset_slice ]
y_test = data[train_set_size+valid_set_size:,yset_slice]

但这种说法是错误的。因此,请告诉我是否有任何类似的方法可以帮助我。

您可以使用
sklearn.model\u selection.train\u test\u split

 X_train, X_test, y_train, y_test 
    = train_test_split(X, y, test_size=0.2, random_state=1)

 X_train, X_val, y_train, y_val 
    = train_test_split(X_train, y_train, test_size=0.2, random_state=1)

您可以使用
sklearn.model\u selection.train\u test\u split

 X_train, X_test, y_train, y_test 
    = train_test_split(X, y, test_size=0.2, random_state=1)

 X_train, X_val, y_train, y_val 
    = train_test_split(X_train, y_train, test_size=0.2, random_state=1)

您可以从
slice
对象和元组构造索引:

slice1 = slice(-1)
slice2 = slice(4,-1)
slice3 = slice(-2,None)

x_train = data[:train_set_size,slice1, slice2]    
x_valid = data[train_set_size:train_set_size+valid_set_size, slice1, slice2]
x_test = data[train_set_size+valid_set_size:, slice1, slice2]
通过连接多个元组来创建复合元组:

tup1 = (slice1, slice2)
# or with np.s_[:-1, 4:-1]
x_train = data[(slice(train_set_size),+tup1]    
...

您可以从
slice
对象和元组构造索引:

slice1 = slice(-1)
slice2 = slice(4,-1)
slice3 = slice(-2,None)

x_train = data[:train_set_size,slice1, slice2]    
x_valid = data[train_set_size:train_set_size+valid_set_size, slice1, slice2]
x_test = data[train_set_size+valid_set_size:, slice1, slice2]
通过连接多个元组来创建复合元组:

tup1 = (slice1, slice2)
# or with np.s_[:-1, 4:-1]
x_train = data[(slice(train_set_size),+tup1]    
...

对于
[1:2]
的切片,您将保存
x=1
y=2
,然后执行
[x:y]
。你不能用字符串切分。@Ev.Kounis我也有类似的想法。但是有一种混乱。如果我需要对最后一列进行切片,那么我会尝试
[-1]
[-1:]
,那么
x
y
有什么值呢?对于
[1:2]
的切片,您将保存
x=1
y=2
,然后执行
[x:y]/code>。你不能用字符串切分。@Ev.Kounis我也有类似的想法。但是有一种混乱。如果我需要对最后一列进行切片,那么我会尝试
[-1]
[-1:]
,那么
x和
y
的值是多少呢?这可能会有所帮助,但@hpaulj的上述答案对我的场景来说非常令人印象深刻。谢谢你的回答。我会向上投票。这可能会有帮助,但上面@hpaulj的答案对我的场景来说非常令人印象深刻。谢谢你的回答。我会投票的。这很有趣@hpaulj。我将努力实现你的答案。谢谢你的回答,并继续回答。这很有趣@hpaulj。我将努力实现你的答案。谢谢你的回答,请继续回答。