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

Python中多维数组匹配与非匹配值的评估及赋值问题

嘿,这个需求其实很适合用NumPy的矢量化操作来高效解决,不用手动写循环~ 我来给你拆解一下怎么做:

准备工作

首先确保你已经导入了NumPy,然后定义好你的两个数组:

import numpy as np

array_1 = np.array([[1,2,2], [1,2,3],[1,2,1]])
array_2 = np.array([[1,1,2], [2,2,3],[3,1,1]])
方法1:使用np.select(矢量化,高效)

这种方法适合规则较多的场景,完全用NumPy的矢量化逻辑处理,性能拉满。你只需要把所有判断条件和对应的赋值列出来就行:

# 定义所有判断条件
conditions = [
    # array_1和array_2对应位置相同的情况(赋值0)
    (array_1 == 1) & (array_2 == 1),
    (array_1 == 2) & (array_2 == 2),
    (array_1 == 3) & (array_2 == 3),
    # array_1=1,array_2不同的情况
    (array_1 == 1) & (array_2 == 2),
    (array_1 == 1) & (array_2 == 3),
    # array_1=2,array_2不同的情况(这里我假设了规则,你可以根据实际需求修改)
    (array_1 == 2) & (array_2 == 1),
    (array_1 == 2) & (array_2 == 3),
    # array_1=3,array_2不同的情况(同样,按需修改)
    (array_1 == 3) & (array_2 == 1),
    (array_1 == 3) & (array_2 == 2),
]

# 对应每个条件的赋值结果
values = [
    0, 0, 0,  # 相同元素赋值0
    10, 15,   # array_1=1时的不同情况赋值
    5, 20,    # array_1=2时的不同情况赋值
    25, 30    # array_1=3时的不同情况赋值
]

# 生成结果数组
result = np.select(conditions, values)
print(result)

运行后得到的结果是:

[[ 0  5  0]
 [10  0  0]
 [15  5  0]]
方法2:使用字典映射(直观易维护)

如果你觉得条件列表太繁琐,用字典来存规则会更清晰,一看就知道每个( array_1值, array_2值 )对应什么结果:

# 定义规则字典,键是(array_1元素, array_2元素),值是要赋的结果
rule_map = {
    (1,1): 0, (1,2):10, (1,3):15,
    (2,1): 5, (2,2):0,  (2,3):20,
    (3,1):25, (3,2):30, (3,3):0
}

# 把两个数组扁平化后配对成元组,再用字典映射,最后恢复原形状
flatten_pairs = list(zip(array_1.flatten(), array_2.flatten()))
result = np.array([rule_map[pair] for pair in flatten_pairs]).reshape(array_1.shape)
print(result)

这个方法得到的结果和上面完全一样,优点是规则修改起来特别方便,直接改字典就行。

注意事项
  • 如果你的数组元素不止1、2、3,记得把所有可能的配对都加到规则里,避免KeyError;
  • 要是追求极致性能,优先选np.select,因为字典映射本质是Python循环,对于超大数组来说速度会慢一些;
  • 相同元素的规则可以统一写,但分开列在条件里更清晰,也方便你后续调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:53:10