<p>你有一个漂亮的矢量化解决方案在MATLAB中。使用NumPy的一个主要原因是它还允许向量化,所以不应该引入循环。你知道吗</p>
<p>正如卢西亚诺帕斯在评论中所说,有一个<a href="https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html" rel="nofollow noreferrer">guide to NumPy for MATLAB users</a>解释了两者之间的差异和相似之处。它还有一个很好的MATLAB函数列表和它们的NumPy等价物。在翻译MATLAB程序时,这可能会有很大的帮助。你知道吗</p>
<p>一些提示和评论:</p>
<ul>
<li><p>使用所有函数的NumPy版本,即<code>np.sqrt</code>,
<code>np.exp</code>(如前所述)和<code>np.power</code>(而不是<code>**</code>)。这些函数可以以矢量化的方式调用,就像在MATLAB中一样。</p></li>
<li><p>正如@Elisha所注意到的,您缺少<code>s</code>和<code>med</code>的定义,因此我将假设这些是标量,并将它们设置为<code>1</code>。</p></li>
<li><p>除了为<code>math.pi</code>导入<code>math</code>之外,还可以使用<code>np.pi</code>,即<a href="https://stackoverflow.com/q/12645547/4221706">exactly the same</a>。</p></li>
<li><p>您正在创建一个大的<code>r</code>向量,并且只使用第一个<code>nc</code>元素。为什么不从一开始就将<code>r</code>的大小设为<code>nc</code>,如下所示?</p></li>
</ul>
<p>结果NumPy代码:</p>
<pre><code>import numpy as np
nc = 200
ncmax = 600
dx = 0.15e-04
s = 1
med = 1
r = np.arange(dx / 2, dx * nc, dx)
n1 = 1 / (s * np.sqrt(2 * np.pi) * r) * \
np.exp(-np.power(np.log(r) - med, 2) /
(2 * np.power(s, 2)))
</code></pre>