如何解决来自 C++ 奇怪输出的 Python 复数
我正在将一些代码从 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;
}
}
蟒蛇:
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,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 代码等同于您的 C++ 代码。 T = np.append(T,np.complex(r,-i))
不等同于 complex<double> t (r,-i);
。与您的 C++ 产生相同输出的实际等效 Python 代码是:
from numpy import cos,sin,pi # could also import from math instead of numpy,might affect speed though
X = 1000
for n in range(X):
for x in range(X):
r = cos(((2*pi)/X)*n*x)
i = sin(((2*pi)/X)*n*x)
t = complex(r,-i)
print(t)
我测试的方法是在两组代码中将 X
设置为 5
并比较输出。它们是相同的(Python 只是显示更多的精度位数)。
这是我对 C++ 代码的转换。我维护了数组的创建,但预先分配了它们而不是使用 np.append (当您已经定义了数组长度时会不必要地慢)。还向“打印”语句添加了格式。请注意,打印一百万个值需要很长时间,因此我建议将打印行注释掉,或者将 X 的值减少到 50 或更少。
import numpy as np
import sys
np.set_printoptions(threshold=sys.maxsize)
X = 1000
N = X
S = np.zeros((N*X,),dtype=complex)
T = np.zeros((N*X,dtype=complex)
k = 0
for n in range(0,N):
# Not sure what you were trying to do with "S"
for x in range(0,X):
r = np.cos((2*np.pi/X)*n*x)
i = np.sin((2*np.pi/X)*n*x)
T[k] = np.complex(r,-i)
print('{val:14.3f}'.format(val=T[k]))
k += 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。