【问题标题】:Creating vector with one unknown using a function使用函数创建具有一个未知数的向量
【发布时间】:2021-07-27 15:28:21
【问题描述】:

我有一个问题,虽然必须有一个简单的方法,但我无法理解。基本上,我有这个功能:

Pr(d) = Pr(d_0) -10*n*lodg(d/d_0)

我们可以(暂时)忽略Pr(d) 术语。现在,我想传递以下数据框:

                          d  
0                        200      
1                        600      
2                        800      
3                       1000      

使用d_0 常量。我实际上应该使用 df_matrix = df.to_numpy() 将它作为数组传递。

我想要的是创建一个函数

import pandas as pd
import numpy as np
from sympy import symbols, solve
from scipy.optimize import fsolve
import math

def recieved_power(pr_d0,d_0, x):
    pr_d0 -10*n*math.log(d/d_0)

这将返回一个带有变量n(未知)的向量。它应该返回:

-3.0102999566398116*n
-7.781512503836435*n
-9.030899869919434*n
-10.0*n

这可能吗。我不能只是在之后乘以n,因为在工作的后期可能会有新的因素。

感谢您的任何见解。

【问题讨论】:

  • 你想返回一个不同参数的变量n的lambda函数吗?
  • 如果得到的向量对以后的计算有用,那么它可能是一个替代方案。

标签: python pandas numpy math scipy


【解决方案1】:

我建议你改变

def recieved_power(pr_d0,d_0, x):
    pr_d0 -10*n*math.log(d/d_0)

进入

def recieved_power(pr_d0,d,d_0):
    return lambda n: [ pr_d0 -10*n*math.log(single_d/d_0) for single_d in d]

例如,下面的代码 sn-p 接受参数 pr_d0、d 和 d0 并返回一个函数,该函数接受 n 并输出一个数字列表,每个数字代表一个 pr_d0 -10nmath.log(d/d_0)

import math

d=[200,600,800,1000]

def recieved_power(pr_d0,d,d_0):
    return lambda n: [ pr_d0 -10*n*math.log(single_d/d_0) for single_d in d]   

func_list=recieved_power(0,d,d_0=1)

print(func_list(3))

【讨论】:

  • 谢谢!因此,换句话说,不可能使输出包含未知数。对吗?
  • 乐于助人。实际上,您可以交换 lambda 和列表解析顺序,但由于 Python 将引用与值一起复制,这种方式会导致编码混乱。除了这两个,我不知道有什么更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2021-10-18
  • 2020-12-06
  • 2021-04-23
  • 1970-01-01
  • 2018-11-18
相关资源
最近更新 更多