瑞利测试,从函数中只得到一个答案(Python3)

2024-04-25 12:16:47 发布

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

我一直在尝试生成一个

到目前为止,我的情况是:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def rayleightest(t, f):
    pi = np.pi
    n = 528
    z = (1.0/n)*((np.sum(np.cos(2.0*pi*f*t)))**2+(np.sum(np.sin(2.0*pi*f*t)))**2)
    return z

def main():
    file = 'Rayleighdata.dat'

    t0 = np.loadtxt(file, usecols=(0,))
    t = np.array(t0)

    Pmax = 90
    Pmin = 1.5
    fmin = 1/Pmax
    fmax = 1/Pmin
    t1 = 1.08
    tn = 359.393
    T = tn - t1
    f0 = 1/T
    OFAC = 2.245
    fstep = f0/OFAC
    M = int((fmax-fmin)/fstep)
    j = 2348
    fj = fmin + j*fstep

    fk = np.arange(fmin, fmax, fstep)
    f = np.array(fk)


    list1 = list(map(rayleightest,t,f))

    x = np.linspace(fmin, fmax, fstep)

    plt.plot(x, list1, marker='o', linestyle='--', label='data')


    plt.legend()
    plt.show()




if __name__ == "__main__":
main() 

现在如果我打印列表1,我只得到一个数字的完整列表。为什么?在此之前,如果使用sum而不是np.总和. 我只是不知道如何调用rayleightest函数并以每个频率遍历文件中的所有数字(n=528)。你知道吗

如果我打电话

z = rayleightest(t, f)

我只得到了第一个答案。你知道吗


Tags: importmaindefasnppipltarray
1条回答
网友
1楼 · 发布于 2024-04-25 12:16:47

您的main()函数包含list1 = list(map(rayleightest,t,f))。这就是如何在tf中得到每对值的一个答案,并得到一组值的结果。换句话说,代码计算rayleightest(t[0], f[0]),然后rayleightest(t[1], f[1]),依此类推。你知道吗

使用代码z = rayleightest(t, f)时,传递的是2个numpy数组,而不是2个数字。结果是一个单一的值,因为rayleightest()中的公式包含np.sum()—您将数组中的所有值相加为一个单一的值。你知道吗

所以这个公式就是为什么不同的输入数据只有一个值的原因。如果这是计算过程的预期行为,则由您来回答问题。你知道吗

现在来看看为什么在第一种情况下,列表中的值相同。因为对于每一对数字,你基本上都要计算sin(x * y) ** 2 + cos(x * y) ** 2,它总是1,所以rayleightest中的z只等于1 / n。你知道吗

编辑

现在,当您提供了您试图用代码实现的原始公式时,问题实际上是什么变得更加清楚了。你知道吗

我所做的修改:

(1)list1 = [rayleightest(t, val) for val in f]

(2)x = np.arange(fmin, fmax, fstep)

(3)plt.plot(x, list1, 'r-', label='data')

我得到的结果是:

enter image description here

相关问题 更多 >