为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2021-12-09 10:31:18
我正在尝试运行一个模拟,其中我执行以下操作:从 0 到 1 之间的均匀分布中随机抽取 2000 个样本计算任何样本与其之前选择的样本之间的差异 du使用该差异来计算 r=EXP(-a*du)将另一个随机样本 z 与 r 的计算值进行比较创建一个 r>z 的随机样本列表,并丢弃所有其他样本重复这个过程,直到 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)
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

du对两个不同的概念(所有有效值的容器du以及每次du迭代的每个单独值)使用相同的变量名称。

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

顺便说一句,您的代码中似乎有一个错字 - 您将原始数组定义为NP,但后来将其称为N


查看完整回答
反对 回复 2021-12-09
?
慕村225694

TA贡献1880条经验 获得超4个赞

请注意,因为你没有提供任何代码,我要告诉你的代码是不是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 数组,您还可以根据条件过滤/删除项目。


抱歉,如果这些不能完全回答您想要的,但它应该让您朝着正确的方向前进。


查看完整回答
反对 回复 2021-12-09
  • 2 回答
  • 0 关注
  • 2972 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信