2011-10-31 43 views
1

我想創建一個程序來計算從統一的隨機數分佈中取出的N個隨機數的平均值。程序必須運行 N = 10,100,1000 ,10000,100000,1000000隨機numbers.Then,我必須繪製平均值爲 N.python(scipy) - 設置序列錯誤的數組元素

的功能,我這樣做:

from scitools.std import * 
import matplotlib.pyplot as plt 


N=10 

distribution=[] 
for i in range(1,7): 
    N*=10 
    random_numbers=[random.uniform(0,1,size=N)] 
    distribution.append(random_numbers) 


plt.semilogx(array(range(N)),array(distribution).mean()) 
plt.xlabel('N') 
plt.grid(True) 
plt.show() 

它給我的錯誤在標題線我在哪裏做情節。 此外,如果有另一種更pythonic這樣做,我會感激它。

謝謝。

+0

您能告訴我們錯誤嗎? – Blender

+0

它在標題中:設置一個具有序列的數組元素(Valueerror) – George

+1

在將其添加到分佈之前,取random_numbers的均值。 –

回答

1
import scipy 
import matplotlib.pyplot as plt 

Ns=[10**i for i in range(1,7)] 
means=[scipy.random.uniform(0,1,size=N).mean() for N in Ns] 

plt.semilogx(Ns,means) 
plt.xlabel('N') 
plt.grid(True) 
plt.show() 
  1. 正如已經提到的,distribution是 陣列的列表,具有不同形狀的內部陣列。通過調用np.array(distribution),您無法形成這樣一個對象的陣列 陣列。
  2. 至少出於繪圖的目的,您不需要保存整個 分配。只需計算和存儲手段。一個簡潔的方式來做 即使用list comprehension
  3. Don't use from module import * in scripts。它使得 難以追蹤變量來自哪裏。 from module import *爲 (主要)用於交互式會話,但通常不推薦用於腳本。
+0

好的,謝謝你的提示!我使用導入*因爲有些時候很難知道什麼方法去了哪裏。 – George

+0

現在就花時間整理一下,並保存一些關於如何使用各種功能的例子,以便稍後進行剪切和粘貼。 '從scipy import *'做'特別危險,因爲'scipy.any'與Python的內建'any'不同。 '從scipy導入*'覆蓋了Python的內置'任何',使得訪問更加困難(並且是潛在的錯誤來源)。 – unutbu

0

你似乎在列表中可以附加一個列表,像這樣:

a = [[1], [2], [3]] 

試試這個代碼,而不是:

for i in range(1, 7): 
    N*=10 
    distribution.append(random.uniform(0,1,size=N)) 

@Raymond建議採取序列的均值:

plt.semilogx(array(range(N)),array(sum(distribution)/float(len(distribution)))) 
1

計算我an()在將隨機數添加到分發列表之前。然後你有一個簡單的n元素列表。問題是,你需要標量的列表,而不是陣列的列表:

distribution=[] 
for i in range(1,7): 
    N*=10 
    random_numbers=[random.uniform(0,1,size=N)] 
    distribution.append(array(random_numbers).mean()) 
+1

+1。爲了完整起見,我將添加一些解釋:OP的轉換「數組(分配)」不起作用,因爲它試圖將一列不同長度的一維數組轉換爲一個NumPy數組,不可能。 'map(numpy.mean,distribution)'也適用於原始代碼。 –

+0

上面的代碼的問題是,「mean」方法不起作用,因爲random_numbers是一個list.If我使它數組,然後它給了我錯誤:必須有相同的第一維 – George

+0

標量列表應該可以轉換爲一個數組,所以你可以採取的意思。 –

相關問題