我需要了解如何翻译这几行MATLAB代码。我不了解如何创建n1
个n
元素的向量,以及如何使用与MATLAB中相同的公式填充它。
这是MATLAB代码:
nc = 200; ncmax = 600; dx = 0.15e-04;
r = (dx/2):dx:dx*(ncmax+3);
n1(1:nc) =(1 ./ (s.*sqrt(2*pi).*r(1:nc))).*exp(-((log(r(1:nc)) - med).^2)./(2*s^2));
我在Python中有以下内容,但n1
始终是nc
个元素的空数组:
import numpy as np
r =np.arange((dx/2),(dx*(ncmax+3)),dx)
count=1
n1=np.empty(nc)
while (count<nc)
n1[count]=(1/(s*np.sqrt(2*pi)*r[count]))*np.exp(-((np.log(r[count]))-med)**2)/(2*s**2)
count=count+1
答案 0 :(得分:1)
你在MATLAB中有一个漂亮的矢量化解决方案。使用NumPy的一个主要原因是它也允许矢量化 - 所以你不应该引入循环。
正如lucianopaz的评论所述,有guide to NumPy for MATLAB users解释了两者之间的差异和相似之处。它还有一个很好的MATLAB函数列表和它们的NumPy等价物。在翻译MATLAB程序时,这可能会有很大帮助。
一些提示和评论:
使用所有功能的NumPy版本,即np.sqrt
,
np.exp
(与之前一样)和np.power
(而不是**
)。这些函数可以以矢量化方式调用,就像在MATLAB中一样。
正如@Elisha所注意到的,您错过了s
和med
的定义,因此我们假设这些是标量,并将它们设置为{{1} }。
您可以使用1
math
,而不是仅为math.pi
导入np.pi
。
您正在创建一个较大的r
向量,并且只使用第一个nc
元素。为什么不从一开始就制作r
nc
尺寸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)))
,如下所示?
产生的NumPy代码:
.btn-link, .btn-link:active, .btn-link:focus, .btn-link:hover {
border-color: transparent;
}
答案 1 :(得分:0)
pi
应为math.pi
(在您添加import math
后):
添加到您的空行:while (count < nc):
s
和med
未在您撰写的范围内定义