python 中的內建函式slice

2021-10-03 02:57:33 字數 1836 閱讀 7651

slice()函式是乙個切片函式,可以作用於list,tuple,numpy等結構,其作用類似於列表中常見的切片操作,但是如果按照某個長度將list等可以用於切片的序列做等分,一般可以用乙個迴圈可以實現。

l =[1,2,3,4,5,6,7,8,9,10]

i = 0

while(i<10):

print(l[i:i+2])

i += 2

output:

[1, 2]

[3, 4]

[5, 6]

[7, 8]

[9, 10]

這個過程,可以用slice()函式代替。

fold_size = 2  

for j in range(len(l)//fold_size):

idx = slice(j*fold_size,(j+1)*fold_size)

print(l[idx])

slice()函式一共有三個引數:start,end,step。step預設為1。slice()根據start,end,step返回乙個slice(0, 2, none)結構,然後應用於列表結構。

這樣看,slice()函式的好處並沒有特別多的體現,但是它能容易地用於tensor結構,也就是2維甚至更高維度。

import torch

x = torch.rand(10,8)

fold_size = 2

for j in range(0,x.size()[1]//fold_size):

idx = slice(j * fold_size, (j + 1) * fold_size)

print(x[:,idx]) ##切分8維度,切分10維度-> x[idx,:]

print(x[:,idx].size())

'''將8這個維度,每份為2進行切分,返回每份大小。

output:

tensor([[0.6415, 0.9648],

[0.2723, 0.1438],

[0.5300, 0.8959],

[0.1583, 0.9972],

[0.4612, 0.9555],

[0.9713, 0.9526],

[0.5785, 0.1008],

[0.1837, 0.9140],

[0.6577, 0.1127],

[0.0530, 0.7081]])

torch.size([10, 2])

'''

在對於切分tensor結構中,slice()內建函式和tensor中的split()作用類似。

for step,x in enumerate(torch.split(x,2,dim=1)):

print(x)

'''x按照第二維度,每塊2切分

x同上'''

因為tensor中有split(),但是在numpy等結構中,可以用slice()做切分,下面是numpy結構的乙個切分。

import numpy as np

x = [[1,2,3,1],[4,5,6,1],[7,8,9,1],[10,11,12,1]]

x = np.array(x)

fold_size = 2

for j in range(0,x.shape[1]//fold_size):

idx = slice(j * fold_size, (j + 1) * fold_size)

print(x[:,idx])

print(x[:,idx].shape)

python 中的內建函式

built in functions abs divmod input open staticmethod all enumerate int ord str any eval isinstance pow sum basestring execfile issubclass print super...

python中的內建函式

以下是目前我們已經滲透過的內建函式 int 建立或者將其他資料轉化為整型float 建立或者將其他資料轉化為浮點型bool 建立或者將其他資料轉化為布林型complex 建立或者將其他資料轉化為複數str 建立或者將其他資料轉化為字串list 建立或者將其他資料轉化為列表tuple 建立或者將其他資...

Python中的內建函式

len s 返回物件內元素的個數。dic s lst 2 3,4 5,6 6 print len dic print len s print len lst 輸出結果 2 46max iterable,key,default 返回最大值。max 1 max 3,1,2,6 max 2 max def...