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
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!虽然你的帖子中有一个合理的问题,但它肯定与整个模拟无关。请把你的剧本剪下来准备。是的,这解决了我的问题。谢谢你的帮助@如果有帮助,请接受我的回答;谢谢