如何用NumPy向量化操作替代循环给图像多目标区域赋值
失效原因
你传入的array_of_y_indexing_arrays和array_of_x_indexing_arrays是包含100个长度不等一维数组的列表,NumPy的高级索引无法直接将这种不规则嵌套序列和形状为(100,)的data数组做广播匹配,因此赋值失败。
正确向量化实现
将所有索引和对应填充值统一拼接为一维数组后一次性赋值,所有操作均为NumPy原生实现,无Python层面循环,效率远高于原生遍历:
# 拼接所有y轴、x轴索引为连续的一维数组 all_y_indices = np.concatenate(array_of_y_indexing_arrays) all_x_indices = np.concatenate(array_of_x_indexing_arrays) # 统计每个目标的像素数量,将data中每个值重复对应次数 pixel_counts = [len(arr) for arr in array_of_y_indexing_arrays] expanded_data = np.repeat(data, pixel_counts) # 一次性完成所有位置的赋值 image[all_y_indices, all_x_indices] = expanded_data
额外注意
你提供的data初始化代码data = np.array((100,))存在错误,该代码会生成仅含单个元素100的数组,若要初始化长度为100的空数组,应写为data = np.empty(100)或data = np.zeros(100)。
内容的提问来源于stack exchange,提问作者The Exile
相关产品推荐
相关产品推荐

