如何将多个同形状无重叠值的numpy数组合并为单个数组?
合并无重叠有效值的Numpy数组
嘿,针对你说的这种「每个位置只有一个数组有非0有效值、其余都是0」的情况,合并起来其实特别省心,不用复杂的判断逻辑,直接求和就搞定了!
核心思路
因为每个位置上只有一个数组存在有效值(非0),其他数组在该位置都是0,所以把所有数组加起来之后,每个位置的结果自然就是那个唯一的有效值——完美契合你的需求。
示例代码
1. 直接合并多个独立数组
import numpy as np # 准备几个形状相同、无重叠有效值的示例数组 arr1 = np.array([[1, 0, 0], [0, 0, 0]]) arr2 = np.array([[0, 2, 0], [0, 0, 3]]) arr3 = np.array([[0, 0, 4], [5, 0, 0]]) # 直接求和合并 merged_arr = arr1 + arr2 + arr3 print(merged_arr) # 输出: # [[1 2 4] # [5 0 3]]
2. 处理字典中的数组
如果你的数组是以「元组为键、数组为值」存储在字典里,只需要把所有值提取出来再求和就行:
# 示例字典 arr_dict = { (0, 0): np.array([[1, 0, 0], [0, 0, 0]]), (0, 1): np.array([[0, 2, 0], [0, 0, 3]]), (1, 0): np.array([[0, 0, 4], [5, 0, 0]]) } # 方法1:用Python内置sum函数 merged_arr = sum(arr_dict.values()) # 方法2:用numpy的sum函数(数组数量多的时候更高效) merged_arr = np.sum(list(arr_dict.values()), axis=0) print(merged_arr) # 输出和上面一致
注意事项
- 如果你的有效值包含负数,不要用
np.max(因为0会比负数大,导致结果错误),求和是最稳妥的方案。 - 如果数组的数据类型不一致,可以在求和前统一类型,比如:
arr_list = list(arr_dict.values()) merged_arr = np.sum(np.array(arr_list, dtype=np.float64), axis=0)
内容的提问来源于stack exchange,提问作者Spenhouet
相关产品推荐
相关产品推荐

