考虑一下:我正在尝试为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
的工作原理。这只是错误消息中的错误吗?
答案 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
我看到随机数出现了转置维度