【发布时间】:2021-04-14 12:55:27
【问题描述】:
我正在将一些代码从 C++ 转换为 Python,而 Python 输出中的一些值是错误的。预期的输出是存储在数组中的数字对。在 python 中,我首先得到很多 1-0j 对,然后是好的。在 C++ 中,最大值约为 1.3,而在 Python 中则超过 9。如何修改我的 python 代码才能从 C++ 获取输出。
main func C++,我知道S什么都不做,但我以后会用它:
int X = 1000;
int N = X;
complex<double> S;
for (int n=0; n<X; n++)
{
S = complex<double>(0,0);
for (int x=0; x<X; x++)
{
double r = cos(((2*M_PI)/X)*n*x);
double i = sin(((2*M_PI)/X)*n*x);
complex<double> t (r, -i);
cout << t << endl;
}
}
Python:
import numpy as np
from math import pi
import sys
np.set_printoptions(threshold=sys.maxsize)
X = 1000
N = X
S = np.zeros(0, dtype = complex)
T = np.zeros(0, dtype = complex)
n = 0
x = 0
for n in range(0, 1000, 1):
# S = np.append(S, np.complex(0 ,0)
for x in range(0, 1000, 1):
r = np.cos(((2*pi)/X)*n*x)
i = np.sin(((2*pi)/X)*n*x)
T = np.append(T, np.complex(r, -i))
print(T)
print('\n')
【问题讨论】:
-
你能把每段代码的输出部分贴出来吗?当我自己运行 python 代码时,我看到像
9.51056516e-01j这样的值,它不是 9.5... 但实际上是 0.95... -
我同意@Kevin,我相信格式把你搞砸了。此代码不应输出大于 1.0 的值:abs(T)
-
嗯,是的,我的错。和 '。' .但是你没有看到“1.00000000e + 00-0.j”?当我开始我的 Python 程序时,它一开始就向我展示了很多东西?
-
因为当
n为 0(前 1000 个值是正确的)时,您正在计算cos(0)和sin(0),这将为您提供一个复数1 + 0i