2017-08-10 118 views
0

考慮:我試圖爲k的每個元素生成s樣本von mises分佈,這導致k=0(這是我的零假設,所以我希望它儘可能準確)的錯誤。我試圖通過給出低的k並隨機化偏向來「欺騙」它。形狀不匹配:形狀X的值數組無法廣播到形狀的索引結果。 。 。 X?

假設

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

*這只是在錯誤信息*錯誤 - 是看到我的編輯答案詳細說明這個 –

回答

2

錯誤消息

看來,有在打印出您收到一個錯誤

的代碼修復

的問題是因爲你在ra的形狀ndom號碼分配是錯誤的。 看看下面的...

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 

,我看到的是隨機數推出了換位尺寸

+0

它只是錯誤消息中的一個錯誤呢?我的意思是如果它告訴我形狀是(s,1)和(1,s),那將是一個非常容易的調試。 –

+0

我同意在這種情況下,錯誤信息並不直觀:) –

+0

希望我的回答能讓你明白'ValueError'確實完全令人困惑! –

相關問題