python list等分,并从等分的子集中随机选取一个数

有些时候我们需要从视频序列中均匀的随机采样,我们可以每隔x步进行一次采样,这就要求对一个list每隔x步进行一次截取,再从截取到的不同的子集中随机选取一个数就是我们平均采样的帧的idx。

import random

def split(a, n):
    k, m = divmod(len(a), n)
    return [a[i * k + min(i, m):(i + 1) * k + min(i + 1, m)] for i in list(range(n))]

list_split = split(list(range(15)), 3)
print(list_split)
tmp = [random.choice(i) for i in list_split]
print(tmp)

结果:

list_split====>
[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]

tmp====>
[0, 6, 12]

 

以下是使用 Python 编写的一个简单示例脚本,用于等切割矢量多边形: ```python from shapely.geometry import Polygon, LineString def split_polygon(polygon, cutting_line): intersections = polygon.exterior.intersection(cutting_line) if intersections.is_empty: return [polygon] if intersections.geom_type == 'Point': intersections = [intersections] else: intersections = list(intersections) sorted_intersections = sorted(intersections, key=lambda p: polygon.exterior.project(p)) polygons = [] previous_intersection = None for intersection in sorted_intersections: if previous_intersection is None: start_point = polygon.exterior.interpolate(0.0, normalized=True) else: start_point = previous_intersection end_point = intersection sub_polygon = Polygon([start_point] + list(polygon.exterior.coords)[polygon.exterior.coords.index(start_point.coords[0])+1 : polygon.exterior.coords.index(end_point.coords[0])+1] + [end_point]) polygons.append(sub_polygon) previous_intersection = intersection return polygons # 示例用法 polygon = Polygon([(0, 0), (0, 5), (5, 5), (5, 0)]) # 定义一个矩形多边形 cutting_line = LineString([(1, 3), (4, 3)]) # 定义切割线 result = split_polygon(polygon, cutting_line) for sub_polygon in result: print(sub_polygon) ``` 这个示例使用了 Shapely 库来处理矢量几何对象。它定义了一个名为 `split_polygon` 的函,该函接受一个多边形和一个切割线作为输入,并返回切割后的子多边形列表。示例用法的多边形是一个矩形,切割线是从 (1, 3) 到 (4, 3) 的直线。程序将切割结果打印出来。 请注意,此示例仅处理多边形的外环,并且假设切割线不会与多边形的内环相交。如果需要处理更复杂的情况,可能需要进一步的逻辑和算法来处理内环或自相交等情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值