Python 6 Inner Structure

本文介绍了Python中的三种核心数据结构:列表、元组和字典的基本用法及特点,并对比了它们之间的区别。此外还讲解了如何使用这些数据结构进行常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 数据结构

在Python中有三种内建的数据结构——列表、元组和字典。

1) 列表

  • 用[]标识
  • 使用,类似于STL
  • print语句的结尾使用了一个 逗号 来消除每个print语句自动打印的换行符。
  • 我们使用列表的sort方法来对列表排序。需要理解的是,这个方法影响列表本身,而不是返回一个修改后的列表——这与字符串工作的方法不同。这就是我们所说的列表是 可变的 而字符串是 不可变的

 

2) 元组

元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。

 

3) 字典

  • 类似于map
  • 你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键
  • 这在编译器设计的术语中被称作 符号表

2. 序列

  • 列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符和切片操作符。
  • 索引切片操作比较新颖,且取的序列都是[ )
  • 引用和COPY,记住列表的赋值语句创建拷贝。你得使用切片操作符来建立序列的拷贝。 见下例

 

 

3. 字符串

 

4. 区别

列表中的项目应该包括在方括号中,
你可以添加、删除或是搜索列表中的项目。
由于你可以增加或删除项目,所以列表是可变的数据类型,
即这种类型是可以被改变的。

元组和列表十分类似,但是元组是不可变的.
也就是说你不能修改元组。
元组通过圆括号中用逗号分割的项目定义。
元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,
即被使用的元组的值不会改变。

 

### Inner-MPDIoU 损失函数详解 #### 概念 Inner-MPDIoU(Internal Multi-Point Distance Intersection over Union)损失函数是一种专门用于处理目标检测任务中的复杂对象结构的方法。该损失函数仅关注目标内部各部件之间的交并比(IoU),而不考虑外部环境的影响[^1]。 #### 使用场景 适用于具有多个可区分部分的目标物体识别场合,比如人体姿态估计、车辆细粒度分类等,在这类应用中,模型不仅需要定位整个主体的位置,还需要精确捕捉其各个组成构件的具体位置关系。通过优化这些局部区域间的重叠程度来提升整体性能表现。 #### 计算方法 计算过程大致如下: 1. **提取关键点** 对于每一个预测框内的所有可能的关键部位设定对应的锚定点; 2. **构建多边形** 利用上述得到的一系列坐标点形成封闭图形表示单个实例的不同子域; 3. **求解IoUs** 针对每一对实际标签与预测结果所形成的闭合曲线集合分别计算它们之间两两相交面积除以其联合覆盖总面积的比例值即为各自对应位置处的IoU得分; 4. **聚合统计量** 将上一步获得的所有分项指标汇总起来作为最终衡量标准之一参与到总成本函数之中去影响反向传播更新权重参数的过程当中。 ```python def inner_mpdiou_loss(pred_boxes, target_boxes): """ Calculate the Inner MPDIoU loss between predicted and target boxes. Args: pred_boxes (Tensor): Predicted bounding box coordinates. target_boxes (Tensor): Ground truth bounding box coordinates. Returns: Tensor: Computed Inner MPDIoU loss value. """ # Extract keypoints from both sets of boxes... pred_keypoints = extract_keypoints(pred_boxes) target_keypoints = extract_keypoints(target_boxes) # Construct polygons based on extracted keypoints... pred_polygons = construct_polygons(pred_keypoints) target_polygons = construct_polygons(target_keypoints) ious_sum = 0 num_parts = len(pred_polygons) for idx in range(num_parts): intersection_area = compute_intersection_area( pred_polygons[idx], target_polygons[idx]) union_area = compute_union_area( pred_polygons[idx], target_polygons[idx]) part_iou = intersection_area / union_area if union_area != 0 else 0 ious_sum += part_iou avg_inner_diou = ious_sum / num_parts return 1 - avg_inner_diou def extract_keypoints(boxes): pass # Placeholder function to demonstrate structure. def construct_polygons(keypoints): pass # Placeholder function to demonstrate structure. def compute_intersection_area(poly_a, poly_b): pass # Placeholder function to demonstrate structure. def compute_union_area(poly_a, poly_b): pass # Placeholder function to demonstrate structure. ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值