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

4
考虑以下问题:我正在尝试为每个k元素生成von mises分布的s个样本,但对于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个回答

10

错误信息

看起来您收到的打印输出中存在一个错误。

代码修复

问题出在您随机数分配的形状上。请查看以下内容...

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

我发现随机数的维度被转置了。


2
那么这只是错误信息中的一个 bug 吗?我的意思是,如果它告诉我形状是 (s,1) 和 (1,s),那么调试起来就很容易了。 - Daniel F
我同意在这种情况下错误信息不够直观 :) - Alexander McFarlane
希望我的回答能让你放心,ValueError 确实非常令人困惑! - Alexander McFarlane
3
那就是我因为信任错误信息而没有检查实际的shape所得到的结果。 - Daniel F
1
你能帮忙解决这个问题吗?https://stackoverflow.com/questions/68225332/invalid-argument-in0-mismatch-in1-shape - user

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接