索引错误:索引3超出轴1的大小为3的范围

时间:2017-01-15 19:31:53

标签: python numpy

我正在运行以下代码,其中函数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)

任何人都可以建议我做错了什么以及如何修改它?

2 个答案:

答案 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”,它将从数组中提取第四个元素而不是第三个(因为第一个为零)