首先乍一看似乎是列表的问题。报错的原因是列表不能切片。
python中的普通列表和numpy数组的关系:
Python 列表 只能用整数索引,不支持多维切片 [:, 0:]
:
bbox_list = [[1, 2, 3, 4], [5, 6, 7, 8]] # Python 列表
print(bbox_list[:, 0:]) # ❌ 错误:列表不支持多维索引
numpy数组支持多维索引:
import numpy as np
bbox_array = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) # NumPy 数组
print(bbox_array[:, 0:]) # ✅ 正确
Python 列表 处理数值计算时效率低,因为它存储的是指针,而不是连续的内存块:
bbox_list = [[1, 2, 3, 4], [5, 6, 7, 8]]
sum_ = sum(sum(row) for row in bbox_list) # 需要 Python 解释器遍历列表
NumPy 数组 直接用 C 语言底层优化,速度更快:
import numpy as np
bbox_array = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
sum_ = np.sum(bbox_array) # 直接在 C 级别执行
存储 Python 列表时:数据会以 Python 的 object
类型存储,读取后可能变成 dtype=object
,导致 NumPy 操作失败。
存储 NumPy 数组时:数据以 紧凑的二进制格式 存储,读取后仍然是 NumPy 数组,不会丢失格式。
报错是的解决方式:
要么存储数据的时候就写成array([...])的格式。
如果已经是普通的列表了,手动转换为 NumPy 数组。
np.array([])