【发布时间】:2019-07-22 18:56:21
【问题描述】:
我正在尝试编写一个函数,该函数将创建一个 lambda 函数列表,然后将一个数组传递给该列表。
我想出了如何对这个函数列表进行硬编码,但是,我似乎不知道如何使用 for 循环来创建列表。
例如,让我们使用一个非常简单的函数,我们将 A 的每个元素乘以 1,然后乘以 2,然后乘以 3,... 以此类推,这样每一行对应于 A 的元素,每一列对应于A乘以的数字。
import numpy as np
A = np.array([1,2,3,4])
def f():
F3 = lambda x: 3*x
F2 = lambda x: 2*x
F1 = lambda x: 1*x
F0 = lambda x: 0*x
return lambda x: np.stack((F3(x),F2(x),F1(x),F0(x)),axis=1)
F = f()
F(A)
然后是我的输出。
array([[ 3, 2, 1, 0],
[ 6, 4, 2, 0],
[ 9, 6, 3, 0],
[12, 8, 4, 0]])
上面的代码只用于 3*x。如果我想遵循 n*x 的模式,我会怎么做?我的基本想法如下(但是,这不起作用):
import numpy as np
A = np.array([1,2,3,4])
def _f():
return lambda x: n*x
def f(N):
F = []
for n in range(N):
F.append(lambda x: _f(n))
return np.array(F)
F = f(5)
F(A)
在现实生活中,我的函数 _f() 要复杂得多。这背后的动机是我宁愿让我的程序只遍历每个 _f 一次,然后一次性执行计算 F(A)。
可以通过以下代码实现所需的输出,但是,每次调用 F 时都会遍历循环。
import numpy as np
A = np.array([1,2,3,4])
def _f(n,x):
return n*x
def f(N,x):
F = []
for n in range(N):
F.append(_f(n,x))
return np.array(F)
F = f(5,A)
print(F.T)
这将返回:
[[ 0 1 2 3 4]
[ 0 2 4 6 8]
[ 0 3 6 9 12]
[ 0 4 8 12 16]]
【问题讨论】:
标签: python python-3.x numpy lambda