我正在运行以下代码,其中函数fragment_main.xml
返回一系列具有指定概率的随机值。我在这个答案中使用了这个函数Generating discrete random variables with weights
以下是我的代码:
weighted_values
但是,当我运行此代码时,有时我会收到此错误
def weighted_values(values, probabilities, size):
bins = np.add.accumulate(probabilities)
return np.array(values[np.digitize(random_sample(size), bins)])
def weak_softmax(a):
b=np.exp(a)
return b/(1+sum(b))
elements=np.array([1,2,3])
prob=np.array([0.2,0.5,0.3])
system_index=0;
T=10;M=2;
for t in np.arange(T):
prob=weak_softmax(np.random.uniform(0,1,M+1));
system_index=weighted_values(np.arange(M+1),prob,1)[0]
print(system_index)
任何人都可以建议我做错了什么以及如何修改它?
答案 0 :(得分:1)
错误告诉我你有一个形状为(n,3)
的数组(轴1大小为3),并且你试图用3
In [9]: np.ones((5,3))[:,3]
...
IndexError: index 3 is out of bounds for axis 1 with size 3
在问题陈述中:
values[np.digitize(random_sample(size), bins)]
我建议检查values
的形状。关闭它看起来像np.arange(M+1)
M
是2.那是3号,但是1d。
np.digitize(random_sample(size), bins)
也会产生什么?
当您遇到这样的错误时,您需要检查可疑数组的形状,并检查索引的值范围。我们只能通过阅读您的代码来猜测。
答案 1 :(得分:0)
这是因为Python(与R不同)是基于零的。这意味着,如果您有三个元素,它们的索引是0,1,2,而不是1,2,3。因此,如果您尝试引用“ 3”,它将从数组中提取第四个元素而不是第三个(因为第一个为零)