插值lambda难以理解

时间:2018-05-24 11:17:09

标签: python lambda geometry interpolation

poly1poly2都是包含坐标(x,y)的列表。

现在这个功能是预先实现的,我觉得很难理解:

def interpolate():
    # This function returns a list of tuples (x, y).
    return map(lambda a, b: (a[0] + b[0], a[1] + b[1]), poly_1,
               [(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)])

但你真的能解释一下interpolate会发生什么吗?

我可以从中提取的所有内容(就lambdas而言)

def func_a(a, b):
    return (a[0] + b[0], a[1] + b[1])

def func_b(p, q):
    return (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)

但是所有这些映射都让我感到困惑。

2 个答案:

答案 0 :(得分:2)

map只是将函数应用于一个或多个数组中的每个元素

让我们来看看:

Items = [{"id": "10", "name": "milk"},{"id":"7", "name": "banana"},{"id":"47", "name": "cheese"},{"id":"6", "name":"carrot"}]
Fridge = [{"id":"19", "name": "cheese"},{"id": "10", "name": "milk"},{"id":"43","name": "egg"}, {"id":"6", "name":"not a carrot"}]

result = Fridge.filter(item => Items.map(f => f.id).includes(item.id));
console.log(result);

它是一个带有3个参数的return map(lambda a, b: (a[0] + b[0], a[1] + b[1]), poly_1, [(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)]) 函数:

  1. map可翻译为
  2. lambda a, b: (a[0] + b[0], a[1] + b[1])

    您将在下两个列表中应用

    1. 第一个列表poly_1

    2. 第二个列表def foo(a,b) : return (a[0] + b[0], a[1] + b[1])

    3. 首先是一个包含两个参数[(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)]

      的元组列表

      “x”取自从time * x[0], time * x[1]

      返回的列表

      让我们翻译一下:

      1. map将lambda函数应用于poly_1和poly_2
      2. 的每个元素
      3. map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)等于
      4. lambda p, q: (q[0] - p[0], q[1] - p[1])

答案 1 :(得分:1)

旁注:

def interpolate(poly_1, poly_2):
    return map(lambda p, q: (p[0] + t*(q[0]-p[0]), p[1] + t*(q[1]-p[1])), poly_1, poly_2)

做同样的工作。更快的方式