我需要了解如何翻译这几行MATLAB代码。我不明白如何创建一个由n
元素组成的向量n1
,以及如何使用与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
你有几个问题。你知道吗
pi
应该是math.pi
(在添加import math
之后):
添加到while行:while (count < nc):
s
和med
未在您编写的范围中定义你有一个漂亮的矢量化解决方案在MATLAB中。使用NumPy的一个主要原因是它还允许向量化,所以不应该引入循环。你知道吗
正如卢西亚诺帕斯在评论中所说,有一个guide to NumPy for MATLAB users解释了两者之间的差异和相似之处。它还有一个很好的MATLAB函数列表和它们的NumPy等价物。在翻译MATLAB程序时,这可能会有很大的帮助。你知道吗
一些提示和评论:
使用所有函数的NumPy版本,即
np.sqrt
,np.exp
(如前所述)和np.power
(而不是**
)。这些函数可以以矢量化的方式调用,就像在MATLAB中一样。正如@Elisha所注意到的,您缺少
s
和med
的定义,因此我将假设这些是标量,并将它们设置为1
。除了为
math.pi
导入math
之外,还可以使用np.pi
,即exactly the same。您正在创建一个大的
r
向量,并且只使用第一个nc
元素。为什么不从一开始就将r
的大小设为nc
,如下所示?结果NumPy代码:
相关问题 更多 >
编程相关推荐