擅长:python、mysql、java
<p>您展示的是pythonic,它使用Python列表和迭代方法。<code>numpy</code>的唯一用途是赋值<code>M{i,j] =</code>。列表没有这种索引。在</p>
<p>要充分利用<code>numpy</code>,请创建索引网格或数组,并一次性计算所有值,而无需显式循环。例如,在您的案例中:</p>
<pre><code>In [333]: N=10
In [334]: I,J = np.ogrid[0:10,0:10]
In [335]: I
Out[335]:
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
In [336]: J
Out[336]: array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
In [337]: M = 1/((I + 2*J + 1)**2)
In [338]: M
Out[338]:
array([[ 1. , 0.11111111, 0.04 , 0.02040816, 0.01234568,
0.00826446, 0.00591716, 0.00444444, 0.00346021, 0.00277008],
...
[ 0.01 , 0.00694444, 0.00510204, 0.00390625, 0.00308642,
0.0025 , 0.00206612, 0.00173611, 0.00147929, 0.00127551]])
</code></pre>
<p><code>ogrid</code>是构造可以一起“广播”的数组集的几种方法之一。<code>meshgrid</code>是另一个常见的函数。在</p>
<p>在您的例子中,这个等式可以很好地处理像这样的两个数组。这在很大程度上取决于广播规则,你应该学习这些规则。在</p>
<p>如果函数只接受标量输入,我们将不得不使用某种形式的迭代。这是一个经常出现的问题;搜索<code>[numpy] vectorize</code>。在</p>