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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:01:04