Python - 使用 2d map() 函数式编程

Python - Using 2d map() functional programing

我正在尝试将数组映射到函数。然后将该数组映射到另一个函数,但不确定如何处理映射类型对象或如何映射多维数组。

import numpy as np
import sympy as sp

nn = np.arange(2)
n= len(nn)
x0=0
y0=0
r=10
num=11

def func1(i):
    x1, y1 = x0 + r * sp.cos(2 * sp.pi * i / n), y0 + r * sp.sin(2 * sp.pi * i / n)
    return np.array([sp.N(x1),sp.N(y1)])

def func2(x1,y1):
    x, y = np.linspace(x0, x1, num), np.linspace(y0, y1, num)
    return x,y


map1=map(func1,nn)
map2=map(func2,map1[0],map1[1])

希望输出是一个数组[[0,1,2,3,4,5,6,7,8,9,10],[0,0,0,0,0,0,0,0,0,0,0]],[[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,0,0,0,0,0,0,0,0,0,0]]

我将其表示为单个循环或列表理解。这两个函数是链接的,没有映射

In [60]: def func1(i):
    ...:     x1, y1 = x0 + r * sp.cos(2 * sp.pi * i / n), y0 + r * sp.sin(2 * sp
    ...: .pi * i / n)
    ...:     print(x1,y1)
    ...:     return np.array([int(x1),int(y1)])
    ...: 
    ...: def func2(x1,y1):
    ...:     x, y = np.linspace(x0, x1, num), np.linspace(y0, y1, num)
    ...:     return x,y
    ...: 
    ...: 
In [61]: [func2(*func1(i)) for i in range(2)]
10 0
-10 0
Out[61]: 
[(array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.]),
  array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])),
 (array([  0.,  -1.,  -2.,  -3.,  -4.,  -5.,  -6.,  -7.,  -8.,  -9., -10.]),
  array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]))]
In [62]: np.array(_, int)
Out[62]: 
array([[[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10],
        [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0]],

       [[  0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10],
        [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0]]])

使用map:

np.array(list(map(lambda i: func2(*func1(i)), range(2))),int)

sympy 的使用有点晦涩,但显然它是为了获得“精确”的 sin/cos 值 - 但它们仍然必须转换为 int 才能被 numpysympynumpy 一起使用有很多陷阱。