Python错误:';numpy.float64';对象没有属性';追加';

Python错误:';numpy.float64';对象没有属性';追加';,python,numpy,matplotlib,simulation,uniform-distribution,Python,Numpy,Matplotlib,Simulation,Uniform Distribution,我正在尝试运行一个模拟,其中我执行以下操作: 从0到1之间的均匀分布中随机抽取2000个样本 计算任何样本与之前选择的样本之间的差值du 使用该差值计算r=EXP(-a*du) 将另一个随机样本z与r的计算值进行比较 创建一个r>z的随机样本列表,并丢弃所有其他样本 重复此过程,直到2000个样品被“接受” 以下是我到目前为止的情况。运行此代码时,我收到错误消息“'numpy.float64'对象没有属性'append'”。关于如何解决这个问题有什么想法吗 import numpy as np

我正在尝试运行一个模拟,其中我执行以下操作:

  • 从0到1之间的均匀分布中随机抽取2000个样本
  • 计算任何样本与之前选择的样本之间的差值du
  • 使用该差值计算r=EXP(-a*du)
  • 将另一个随机样本z与r的计算值进行比较
  • 创建一个r>z的随机样本列表,并丢弃所有其他样本
  • 重复此过程,直到2000个样品被“接受”
  • 以下是我到目前为止的情况。运行此代码时,我收到错误消息“'numpy.float64'对象没有属性'append'”。关于如何解决这个问题有什么想法吗

    import numpy as np                                                          
    import matplotlib.pyplot as plt                                             
    import math                                                                 
    
    NP=np.random.uniform(0,1,size=(2000,))                                      
    a=np.linspace(0.1,2,num=20)                                                 
    
    for i in range(len(a)):                                                     
        dr = []                                                                 
        du = []                                                                 
        for j in range(1999):                                                   
            du=N[j+1]-N[j]                                                      
            r=math.exp(-a[i]*du)                                                
            z=np.random.uniform(0,1)                                            
            if r>z:                                                             
                du.append(N[j+1])                                               
                dr.append(r)
    

    请注意,因为您没有提供任何代码,所以我将向您展示的代码不是为您准备的,而是我使用过的代码,听起来您可以很容易地适应您的需要

     # this will simulate 1000 different combinations of my portfolio
        for x in range(1000):
            weights = np.random.random(len(tickers))
            weights /= np.sum(weights)
            portfolio_returns.append(np.sum(weights * log_returns.mean()) * 250)
            portfolio_volatilities.append(np.sqrt(np.dot(weights.T, np.dot(log_returns.cov() * 250, weights))))
    
    这段代码所做的是短1000倍,它为我的数据点创建随机数和权重,然后添加结果。代码不会是统一的,因为它是随机的,但是如果你真的想要统一,你可以简单地逐步增加。然而,我不认为你想要统一的,而是一个足够大的样本量,不让它被异常值抛弃

    比较结果的方法是这样的

    simple_return = (mydata / mydata.shift(1)) - 1
    
    比较随机样本应该是非常直截了当的,所以如果你真的需要帮助,请跟进。使用numpy阵列,您还可以根据条件筛选/删除项目


    很抱歉,如果这些没有完全满足您的要求,但它应该会让您朝着正确的方向前进。

    您使用相同的变量名,
    du
    ,用于两个不同的概念(用于所有有效的
    du
    值的容器,以及每次迭代的每个
    du
    值的容器)

    将您的代码更改为
    du_values=[]
    du_values.append(N[j+1])
    ,它应该可以工作


    另一方面,代码中似乎有一个输入错误-您将原始数组定义为
    NP
    ,但后来将其称为
    N

    您需要在代码中存储所有du吗?现在你将du改写为一个数字,而不是将其保留为一个列表。我不需要存储它们,不。我只想打印一个列表,列出N中的每个随机样本,这些样本产生的du值满足r>z。请在帖子中以文本形式提供代码,而不是图像。@MarcusLim我修复了它。很抱歉,我是新手欢迎来到Stackoverflow.com!虽然你的帖子中有一个合理的问题,但它肯定与整个模拟无关。请把你的剧本剪下来准备。是的,这解决了我的问题。谢谢你的帮助@如果有帮助,请接受我的回答;谢谢