形状不匹配:形状X的值数组无法广播到形状的索引结果。 。 。 X?

时间:2017-08-10 10:13:09

标签: python numpy

考虑一下:我正在尝试为s的每个元素生成k个von mises分布样本,这会引发k=0的错误(这是我的原假设,所以我希望它尽可能准确)。我试图通过给出低k并随机化偏见方向来“捏造”它。

假设

import numpy as np
s = 1000
k = np.arange(10)
theta = np.zeros_like(k)
shp = (10,)

然后是以下代码

import scipy.stats as stat    
rpt = (s,) + tuple(np.ones_like(shp))
theta = np.tile(theta, rpt)
k_zero = np.logical_not(k)
theta[:, k_zero] = np.random.rand(np.sum(k_zero), s) * 2 * np.pi - np.pi
k[k_zero] = .001
ks = np.tile(k, rpt)    

给出错误

Traceback (most recent call last):

  File "<ipython-input-blah>", line 1, in <module>
    theta[:, k_zero] = np.random.rand(np.sum(k_zero), s) * np.pi - np.pi / 2

ValueError: shape mismatch: value array of shape (1,1000) could not be broadcast to indexing result of shape (1,1000)

但是。 。 。那些形状是一样的。为什么我不能这样做?

编辑:,如下所述 -

theta[:, k_zero] = np.random.rand(s, np.sum(k_zero)) * np.pi - np.pi / 2

的工作原理。这只是错误消息中的错误吗?

1 个答案:

答案 0 :(得分:3)

错误消息

您收到的打印件中似乎有一个错误

代码修复

问题是因为随机数分配中的形状是错误的。 看看以下......

theta[:, k_zero] = np.random.rand(np.sum(k_zero), s).reshape(s,1)

调试此类问题的方法是调查指定变量的形状和要分配给它的变量。

例如我所做的是

theta.shape
np.random.rand(np.sum(k_zero), s).shape

我看到随机数出现了转置维度