我正在尝试执行以下模拟操作:
这是我到目前为止所拥有的。运行此代码时,收到错误消息“'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)
答案 0 :(得分:1)
您将相同的变量名du
用于两个不同的概念(所有有效du
值的容器,以及每个迭代中每个du
值的容器)。
将您的代码更改为du_values = []
和du_values.append(N[j + 1])
,它应该可以工作。
顺便说一句,您的代码中似乎有一个错字-您将原始数组定义为NP
,但后来将其称为N
。
答案 1 :(得分:0)
请注意,由于您未提供任何代码,因此我要向您展示的代码不是 FOR 您,而是我使用的代码和 SOUNDS 适应您的需求。
# 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数组,您还可以根据条件过滤/删除项目。
很抱歉,如果这些回答不能完全满足您的需求,那么您应该朝正确的方向前进。