如何将一个简单的MATLAB方程翻译成Python?

2024-09-28 01:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要了解如何翻译这几行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

Tags: 代码log元素countnppimedsqrt
2条回答

你有几个问题。你知道吗

  1. pi应该是math.pi(在添加import math之后)
  2. :添加到while行:while (count < nc):
  3. smed未在您编写的范围中定义

你有一个漂亮的矢量化解决方案在MATLAB中。使用NumPy的一个主要原因是它还允许向量化,所以不应该引入循环。你知道吗

正如卢西亚诺帕斯在评论中所说,有一个guide to NumPy for MATLAB users解释了两者之间的差异和相似之处。它还有一个很好的MATLAB函数列表和它们的NumPy等价物。在翻译MATLAB程序时,这可能会有很大的帮助。你知道吗

一些提示和评论:

  • 使用所有函数的NumPy版本,即np.sqrtnp.exp(如前所述)和np.power(而不是**)。这些函数可以以矢量化的方式调用,就像在MATLAB中一样。

  • 正如@Elisha所注意到的,您缺少smed的定义,因此我将假设这些是标量,并将它们设置为1

  • 除了为math.pi导入math之外,还可以使用np.pi,即exactly the same

  • 您正在创建一个大的r向量,并且只使用第一个nc元素。为什么不从一开始就将r的大小设为nc,如下所示?

结果NumPy代码:

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)))

相关问题 更多 >

    热门问题