猿问

Python 错误:'numpy.float64' 对象没有属性 'append'

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

  1. 从 0 到 1 之间的均匀分布中随机抽取 2000 个样本

  2. 计算任何样本与其之前选择的样本之间的差异 du

  3. 使用该差异来计算 r=EXP(-a*du)

  4. 将另一个随机样本 z 与 r 的计算值进行比较

  5. 创建一个 r>z 的随机样本列表,并丢弃所有其他样本

  6. 重复这个过程,直到 2000 个样本被“接受”

这是我迄今为止所拥有的。当我运行此代码时,我收到错误消息“'numpy.float64' object has no attribute '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)


茅侃侃
浏览 3029回答 2
2回答

慕容森

您du对两个不同的概念(所有有效值的容器du以及每次du迭代的每个单独值)使用相同的变量名称。将您的代码更改为du_values = []和du_values.append(N[j + 1]),它应该可以工作。顺便说一句,您的代码中似乎有一个错字 - 您将原始数组定义为NP,但后来将其称为N。

慕村225694

请注意,因为你没有提供任何代码,我要告诉你的代码是不是FOR你,但代码我已经使用和天籁一样,你可以很容易地采取以您的需求。 # 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 数组,您还可以根据条件过滤/删除项目。抱歉,如果这些不能完全回答您想要的,但它应该让您朝着正确的方向前进。
随时随地看视频慕课网APP

相关分类

Python
我要回答