You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于条件将Numpy子数组高效添加至Numpy数组?

解决Numpy子数组仅替换大于0元素的高效方法

嗨,这个需求其实用Numpy的向量化操作就能完美解决,完全不用写低效的Python循环,两种常用方法分享给你:

方法一:布尔掩码原地修改

这种方法会直接在原数组上进行修改,适合不需要保留原数组的场景:

import numpy as np

original_array = np.array([[2,2],[2,2],[2,2],[2,2]])
sub_array = np.array([[0,0],[1,1],[0,1],[0,0]])

# 创建布尔掩码:标记sub_array中大于0的位置
mask = sub_array > 0
# 仅在掩码为True的位置替换原数组的值
original_array[mask] = sub_array[mask]

print(original_array)
# 输出:
# [[2 2]
#  [1 1]
#  [2 1]
#  [2 2]]

原理很简单:mask是一个和原数组形状相同的布尔数组,original_array[mask]会直接取出所有掩码为True的元素,然后用sub_array[mask]对应位置的值替换,全程是Numpy底层的向量化运算,效率拉满。

方法二:使用np.where生成新数组

如果你不想修改原数组,而是希望得到一个新数组,可以用np.where,一行代码搞定:

import numpy as np

original_array = np.array([[2,2],[2,2],[2,2],[2,2]])
sub_array = np.array([[0,0],[1,1],[0,1],[0,0]])

result_array = np.where(sub_array > 0, sub_array, original_array)

print(result_array)
# 输出和上面完全一致

np.where的逻辑是:第一个参数是条件(这里是sub_array>0),满足条件的位置取第二个参数的值(sub_array),不满足的取第三个参数的值(original_array),非常直观。

两种方法都是Numpy原生的高效操作,不管数组多大,性能都比循环好很多,根据你的需求选就行~

内容的提问来源于stack exchange,提问作者Danii Kilian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:02:50