如何将使用numpy.where的Python函数转换为C# Linq实现
错误点说明
你当前代码中使用的Where是过滤方法,只会保留符合条件的元素,会丢弃不满足x > price的元素,和numpy.where逐元素分支取值、输出长度和输入完全一致的逻辑不符,应该用Select做逐元素映射。
原Python函数逻辑对齐
原Python代码的逐元素处理规则为:
- 对
sT中的每个元素,若大于price则取值为元素值 - price,否则取值为0 - 所有取值统一减去参数
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
相关产品推荐
相关产品推荐

