Python 3.11中如何从numpy数组生成含零填充的奇偶元素矩阵
从NumPy数组分离偶数/奇数元素生成新矩阵
给定一个NumPy数组,我们需要生成两个新数组:一个只保留原数组里的偶数元素,其余位置填0;另一个只保留奇数元素,其余位置填0。举个例子:
输入矩阵:
1 2 3 4 5 6 7 8 9期望输出:
偶数矩阵:0 2 0 4 0 6 0 8 0奇数矩阵:
1 0 3 0 5 0 7 0 9
直接遍历索引的方法效率低还容易出错,用NumPy自带的布尔索引或者np.where就能轻松解决,两种方法都好使:
方法一:使用np.where
np.where可以根据条件批量替换元素,一行代码就能生成目标矩阵:
import numpy as np # 定义原数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 生成仅保留偶数的矩阵 even_arr = np.where(arr % 2 == 0, arr, 0) # 生成仅保留奇数的矩阵 odd_arr = np.where(arr % 2 == 1, arr, 0) # 打印结果 print("偶数矩阵:") print(even_arr) print("\n奇数矩阵:") print(odd_arr)
方法二:布尔索引复制替换
先复制原数组,再把不符合条件的元素置0,逻辑更直观:
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 处理偶数矩阵 even_arr = arr.copy() even_arr[arr % 2 != 0] = 0 # 把非偶数的位置设为0 # 处理奇数矩阵 odd_arr = arr.copy() odd_arr[arr % 2 == 0] = 0 # 把偶数的位置设为0 print("偶数矩阵:") print(even_arr) print("\n奇数矩阵:") print(odd_arr)
两种方法运行后都能得到期望的结果,而且都是NumPy的矢量化操作,比循环遍历索引高效得多。
内容的提问来源于stack exchange,提问作者Caio Muniz
相关产品推荐
相关产品推荐

