如何在Python中将同形状numpy数组2的非0值复制到数组1?
解决方法:利用NumPy布尔索引实现非0值替换
这事儿其实用NumPy的布尔索引就能轻松搞定,核心思路就是先找出数组2里所有非0元素的位置,再把这些位置的值覆盖到数组1对应的位置上。
直接上代码示例:
import numpy as np # 定义原始数组 arr1 = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) arr2 = np.array([[0, 2, 0], [4, 0, 0], [6, 6, 0]]) # 生成布尔掩码:找出arr2中非0的位置 mask = arr2 != 0 # 用掩码把arr2的非0值赋值给arr1对应位置 arr1[mask] = arr2[mask] # 输出结果 print(arr1)
运行这段代码后,你就能得到期望的结果:
[[1 2 1] [4 1 1] [6 6 1]]
补充说明:
- 如果不想修改原始的
arr1,可以先创建一个副本再操作,比如:
这样原arr1_copy = arr1.copy() arr1_copy[mask] = arr2[mask]arr1会保持不变,修改的是副本。 - 布尔索引是NumPy里非常高效的操作,比循环遍历数组快得多,尤其适合处理大规模数组。
内容的提问来源于stack exchange,提问作者freddykrueger
相关产品推荐
相关产品推荐

