python中slice_python 中的内置函数slice()

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)

下面是几个使用 `slice` 函数的例子: ```python # 示例 1: 切片操作 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice_obj = slice(2, 7, 2) sliced_numbers = numbers[slice_obj] print(sliced_numbers) # 输出: [3, 5, 7] # 示例 2: 字符串切片 text = "Hello, World!" slice_obj = slice(7, None) sliced_text = text[slice_obj] print(sliced_text) # 输出: "World!" # 示例 3: 步长为负数的切片 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice_obj = slice(None, None, -1) reversed_numbers = numbers[slice_obj] print(reversed_numbers) # 输出: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] ``` 在示例1,我们使用 `slice` 创建了一个切片对象 `slice_obj`,然后将其应用到列表 `numbers` 上。切片对象的参数为起始索引、结束索引和步长,这里的 `slice_obj` 表示从索引2(包含)开始到索引7(不包含),步长为2。因此,切片后的列表只包含索引为2、4和6的元素。 示例2展示了如何使用切片操作符对字符串进行切片。我们创建了一个切片对象 `slice_obj`,表示从索引7开始到末尾的所有字符。因此,切片后的字符串为 "World!"。 示例3展示了如何使用负数步长来实现反向切片。我们创建了一个切片对象 `slice_obj`,其起始索引和结束索引均为 `None`,步长为-1。这样,切片后的列表将以相反的顺序包含原始列表的元素。 这些例子展示了 `slice` 函数的用法,你可以根据具体需求调整切片对象的参数来实现不同的切片操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值