【问题标题】:Using lambda function to find element from another list or array使用 lambda 函数从另一个列表或数组中查找元素
【发布时间】:2018-10-26 01:54:12
【问题描述】:

编辑问题以供澄清

import numpy as np
tt = np.arange(0, 1000, 1)
st = np.arange(0, 10, 1)
def abc():
    return lambda x: st[np.where(tt==x)] if (50 < x <100) else 0
print(abc()(tt))

期望对于一个给定的、长的周期性时间序列tt,周期为100,函数abc()应该输出st 中的值用于区间 50-100、150-200、250-300,并在其他位置输出 0。有点像..

[0....0..st.....st.0.....0.st....st.0....0.st.....st]

以前问过....

我继承了一个长代码,我需要对其进行一些修改。基本格式是多个函数,每个函数返回一个 lambda 函数

def func1():
  return lambda x: #some math with x, like x**2

def func2():
  return lambda x: #some math with x, like np.sin(x)

等等..

这些函数提供了一个时间序列 t,一个 numpy 一维数组,从中生成所需的数学函数。它工作正常。

例如

import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0, 100, 1)

def fun1():
  return lambda x: x**2

print(fun1()(t)) 
plt.plot(t, fun1()(t))
plt.savefig('Graph.png')

现在我希望将外部文件中的数据作为 [time, value] 对导入/读取,并使用它来生成新的数学函数,而不是像以前那样在函数本身中进行数学运算。

从文件中读取后,我说,

time = [0, 0.1, 0.2, ..... 1000.0]
value = [v1, v2, ...........vn]

我想做

def new_func():
   return lambda x: "*Looking for an answer*"

所以如果我调用 new_func()(t),我会得到 value 作为输出

我尝试过 np.where,并尝试定义子函数。但到目前为止没有任何效果。因为我必须将此函数传递给另一个代码,所以我无法更改基本格式。请指教。

【问题讨论】:

  • “生成”这个词在这里有一个很奇怪的用法。给出一个具体的例子,其中包含一个包含实际数字和你“生成”的实际函数的实际文件。
  • 刚刚编辑了一个有效的简单示例。

标签: python python-3.x numpy lambda


【解决方案1】:

lambda 一个函数本身。将其放入 def 正式函数中作为唯一输出是没有意义的。

如果您想将整个列表乘以 2,lambda 是不够的,您还需要一个迭代器。以下:

func = lambda x: x*2

简单地说这是一个返回输入*2的lambda函数,它相当于:

def func(x): return x*2

如果你想让它适用于整个列表,你需要这样做:

list(map(lambda x: x*2, mylist))

map 会将函数映射到列表的每个元素,但这也适用于命名函数。

为了达到您的目的,假设valuetime 的长度相同。

lambda t: value[time.index(t)]

是您需要的功能。像这样称呼它:

(lambda t: value[time.index(t)])(t)
# OR:
func = lambda t: value[time.index(t)] # assign it name and then
func(t)

【讨论】:

  • 我打算使用从文件中读取的值,而不是在 lambda 函数中使用任何数学。
  • 您需要更清楚地了解您想要做什么。从您在问题中写的内容中,我无法弄清楚您想用它做什么。
  • 很抱歉。我试着说清楚。我需要 lambda 函数从先前从文件中读取的时间值对中获取时间序列并给出适当的值作为输出。
  • lambda t: value[time.index(t)] 将满足您的需求。但您不能返回 lambda,因为它本身就是一个函数。
  • 值给出了未解决的参考。不是为了字典吗?请纠正我。
猜你喜欢
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 2017-07-02
相关资源
最近更新 更多