回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试编写一个函数,它将创建一个lambda函数列表,然后向该列表传递一个数组。你知道吗</p>
<p>我知道如何硬编码这个函数列表,但是,我似乎不知道如何使用for循环来创建列表。你知道吗</p>
<p>举个例子,我们用一个非常简单的函数,把a的每个元素乘以1,然后乘以2,然后乘以3。。。以此类推,每一行对应于A的元素,每一列对应于A乘以的数字。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>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)
</code></pre>
<p>我的输出是。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>array([[ 3, 2, 1, 0],
[ 6, 4, 2, 0],
[ 9, 6, 3, 0],
[12, 8, 4, 0]])
</code></pre>
<p>上面的代码只指向3*x。如果我想按照模式指向n*x,我该怎么办?我的基本想法如下(但这行不通):</p>
<pre class="lang-py prettyprint-override"><code>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)
</code></pre>
<p>在现实生活中,我的函数f()要复杂得多。这背后的动机是,我宁愿让我的程序只对每个f迭代一次,然后一次执行f(A)的计算。你知道吗</p>
<p>所需的输出可以通过以下代码实现,但是,每次调用F时,它都会遍历循环。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>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)
</code></pre>
<p>这将返回:</p>
<pre class="lang-py prettyprint-override"><code>[[ 0 1 2 3 4]
[ 0 2 4 6 8]
[ 0 3 6 9 12]
[ 0 4 8 12 16]]
</code></pre>