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

如何修改Numpy三元运算逻辑实现按数组来源乘对应系数

问题解答

原代码错误点

  • 直接用==对比numpy数组会返回布尔数组,无法作为三元判断的布尔条件,需用np.all()判断数组是否全部元素相等
  • 用逗号分隔两个数组切片会得到元组,而非合并后的单个数组,需要做扁平化拼接处理
  • 三元运算优先级错误,原写法判断条件仅作用于第二个切片表达式,逻辑不符合预期

修正后的代码

写法1:批量计算(适合大数组,性能更高)

import numpy as np 

a_multiplier = 3
b_multiplier = 5

a = np.array([5,32,1,4])
b = np.array([1,5,11,3])
a_and_b = np.array([5,1,32,5,1,11,4,3])

a_and_b = (np.column_stack((a_and_b[::2] * a_multiplier, a_and_b[1::2] * b_multiplier)).ravel()
           if np.all(a_and_b[::2] == a) 
           else np.column_stack((a_and_b[::2] * b_multiplier, a_and_b[1::2] * a_multiplier)).ravel())

print(a_and_b)

运行输出:

[15  5 96 25  3 55 12 15]

写法2:逐元素按索引判断(逻辑更直观,贴合需求)

如果你需要直接通过元素索引判断来源,可以用逐元素三元判断的写法:

import numpy as np 

a_multiplier = 3
b_multiplier = 5

a_and_b = np.array([5,1,32,5,1,11,4,3])
a_and_b = np.array([val * a_multiplier if idx % 2 == 0 else val * b_multiplier for idx, val in enumerate(a_and_b)])

print(a_and_b)

运行结果和上述写法一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:04