考虑:我正在尝试为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


作品。这仅仅是错误消息中的错误吗?

最佳答案

错误讯息

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


Broadcast error on assignment prints dimensions in wrong order
setitem shape mismatch error is incorrect


代码修复

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

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


我看到随机数是换位后的尺寸

关于python - 形状不匹配:形状X的值数组无法广播到形状的索引结果。 。 。 X?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45610825/

10-15 18:34