gpt4 book ai didi

python - 将 C++ 代码转换为 Python 的正确方法

转载 作者:行者123 更新时间:2023-11-28 02:07:11 25 4
gpt4 key购买 nike

我有一个 C++ 代码执行以下操作:

U[0]=rate[0];
map<int,double> Q[N+1];
map<int,double> r[N+1];
map<int,double> d[N+1];
r[0][0]=rate[0];
d[0][0]=1/(1+r[0][0]*dt);
Q[0][0]=1.0;
for(int i=1;i<=N;i++)
{
for(int j=-i;j<=i;j=j+2)
{
if(j==i)
{Q[i][i]= 0.5*Q[i-1][i-1]*d[i-1][i-1];}
if(j==-i)
{Q[i][-i]=0.5*Q[i-1][-i+1]*d[i-1][-i+1];}

Q[i][j]=0.5*(Q[i-1][j-1]*d[i-1][j-1]+Q[i-1][j+1]*d[i-1][j+1]);
}
}

我需要为此编写等效的 Python 版本,因为我对 C++ 不太熟悉。我做了以下事情:

Q, U, r, d = [], [], [], []
Q.append([])
Q[0].append(1)
U.append(rate[1])
r.append([])
r[0].append(rate[1])
d.append([])
d[0].append(1/(1+r[0][0]*dt))
for i in range(0, N):
for j in range(-i, i, 2):
if j == i:
Q[i].append(0.5*Q[i-1][i-1]*d[i-1][i-1])
elif j == -i:
Q[i].insert(-i, (0.5*Q[i-1][-i+1]*d[i-1][-i+1]))
Q[i].insert(j, 0.5*(Q[i-1][j-1]*d[i-1][j-1]+Q[i-1][j+1]*d[i-1][j+1]))

但是,我在这一行中遇到了 index out of range 错误:

Q[i].insert(-i, (0.5*Q[i-1][-i+1]*d[i-1][-i+1]))

我如何正确地将 C++ 代码转换为它的 Python 等效代码?

最佳答案

你得到索引错误是因为你的数组没有预先填充,就像它们在 C++ 中一样。

尝试像这样定义它们:

from collections import defaultdict
...

#map<int,double> Q[N+1];
Q = [defaultdict(float) for _ in range(N+1)]

#map<int,double> r[N+1];
r = [defaultdict(float) for _ in range(N+1)]

#map<int,double> d[N+1];
d = [defaultdict(float) for _ in range(N+1)]

How do I correctly translate the C++ code to it's python equivalent?

如果是我,并且我不理解我开始使用的代码,我会进行逐行、逐个表达式的翻译,并进行绝对最小的更改。

我还需要一个能够与 C++ 代码一起正确运行的测试用例,并对其进行调整以确认 Python 代码。

这是我逐行的、未经测试的翻译:

from collections import defaultdict


#NameError: name 'N' is not defined
N = 12

#NameError: name 'rate' is not defined
rate = [.03]

#NameError: name 'dt' is not defined
dt = 1.0/12


#U[0]=rate[0];
# unused

#map<int,double> Q[N+1];
Q = [defaultdict(float) for _ in range(N+1)]

#map<int,double> r[N+1];
r = [defaultdict(float) for _ in range(N+1)]

#map<int,double> d[N+1];
d = [defaultdict(float) for _ in range(N+1)]

#r[0][0]=rate[0];
r[0][0] = rate[0]

#d[0][0]=1/(1+r[0][0]*dt);
d[0][0] = 1 / (1 + r[0][0] * dt)

#Q[0][0]=1.0;
Q[0][0] = 1.0

#for(int i=1;i<=N;i++)
#{
for i in range(1, N+1, 1):

# for(int j=-i;j<=i;j=j+2)
# {
for j in range(-i, i+1, 2):

# if(j==i)
# {Q[i][i]= 0.5*Q[i-1][i-1]*d[i-1][i-1];}
if j == i:
Q[i][i] = 0.5 * Q[i-1][i-1] * d[i-1][i-1]

# if(j==-i)
# {Q[i][-i]=0.5*Q[i-1][-i+1]*d[i-1][-i+1];}

if j == -i:
Q[i][-i] = 0.5 * Q[i-1][-i+1] * d[i-1][-i+1]

# Q[i][j]=0.5*(Q[i-1][j-1]*d[i-1][j-1]+Q[i-1][j+1]*d[i-1][j+1]);
Q[i][j] = 0.5 * (Q[i-1][j-1] * d[i-1][j-1] + Q[i-1][j+1] * d[i-1][j+1])
# }
#}

关于python - 将 C++ 代码转换为 Python 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com