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

如何将使用numpy.where的Python函数转换为C# Linq实现

错误点说明

你当前代码中使用的Where是过滤方法,只会保留符合条件的元素,会丢弃不满足x > price的元素,和numpy.where逐元素分支取值、输出长度和输入完全一致的逻辑不符,应该用Select做逐元素映射。

原Python函数逻辑对齐

原Python代码的逐元素处理规则为:

  1. 对sT中的每个元素,若大于price则取值为元素值 - price,否则取值为0
  2. 所有取值统一减去参数p后返回

完整实现代码

纯Linq极简写法

public static List<double> CallPayoff(List<double> sT, double price, double p)
{
    return sT.Select(x => (x > price ? x - price : 0) - p).ToList();
}

保留调试输出的写法

如果你需要保留原来的日志打印逻辑,可以写为:

public static List<double> CallPayoff(List<double> sT, double price, double p)
{
    List<double> retVal = new List<double>();
    foreach (var val in sT)
    {
        double current = (val > price ? val - price : 0) - p;
        retVal.Add(current);
        Debug.WriteLine(current.ToString());
    }
    return retVal;
}

逻辑说明

  • 三元运算符x > price ? x - price : 0完全等价numpy.where的分支判断逻辑
  • Select逐元素处理的特性,保证输出列表长度和输入sT完全一致
  • 最后统一减p的操作,和Python代码末尾的- p逻辑完全对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:24:03