Re: [python.tw] 有關python處理期望值的問題

633 views
Skip to first unread message

Yung-Yu Chen

unread,
Apr 18, 2013, 10:45:33 PM4/18/13
to pyth...@googlegroups.com
2013/4/19 alvin shih <alvins...@gmail.com>

最近一個在外企工作的朋友問我python能處理期望值類的問題嗎?

我當然不加思索地就回答沒問題,所以他丟給我一段公式:

N、i為一正整數,且V>=i,求推導當N、i為已知時,如何求得Xi之期望值?


「N、i為一正整數,且V>=i,求推導當N、i為已知時,如何求得Xi之期望值?」

只有這樣的話,這個問題不完整呀。你可能要再向你朋友問清楚一點。

yyc
 



我當場倒抽一口涼氣,這是整人題目嗎?

學習python的時間仍短,我僅知scipy可處理積分的問題,不知是否有先進能提供一些想法?

目前仍在努力中...= =





--
您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW。
如需更多選項,請前往:https://groups.google.com/groups/opt_out。
 
 



--
Yung-Yu Chen
http://solvcon.net/yyc/
+886 (99) 129 4763 (no sms)

Peter. w

unread,
Apr 18, 2013, 10:52:01 PM4/18/13
to pyth...@googlegroups.com
scipy.stats 有現成的 expected value function,可以試試看是不是你要的
http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.expect.html#scipy.stats.rv_continuous.expect

或是,如果有發佈時的困難的話,用 python-statlib 裡的一些工具自己「拼」一個出來,應該也是可行的。

不過 statlib 裡的東西已經比較舊了!

pw.


alvin shih <alvins...@gmail.com> 於 2013年4月19日上午8:59 寫道:

最近一個在外企工作的朋友問我python能處理期望值類的問題嗎?

我當然不加思索地就回答沒問題,所以他丟給我一段公式:

N、i為一正整數,且V>=i,求推導當N、i為已知時,如何求得Xi之期望值?


Yung-Yu Chen

unread,
Apr 18, 2013, 11:03:54 PM4/18/13
to pyth...@googlegroups.com
原來是我沒有開圖片,難怪看不懂題目。

X_i 看起來像是一個 PDF?

yyc


2013/4/19 alvin shih <alvins...@gmail.com>

最近一個在外企工作的朋友問我python能處理期望值類的問題嗎?

我當然不加思索地就回答沒問題,所以他丟給我一段公式:

N、i為一正整數,且V>=i,求推導當N、i為已知時,如何求得Xi之期望值?



我當場倒抽一口涼氣,這是整人題目嗎?

學習python的時間仍短,我僅知scipy可處理積分的問題,不知是否有先進能提供一些想法?

目前仍在努力中...= =





--
您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW。
如需更多選項,請前往:https://groups.google.com/groups/opt_out。
 
 

weijr

unread,
Apr 19, 2013, 7:11:06 AM4/19/13
to pyth...@googlegroups.com
照式子來看,數值計算最簡單的方式,就直接從 i=1 開始照著算。
但也得要知道 V_i 是什麼。

除了式子中 if 中的 條件重疊,
一方面說 V>=i ,式子裡面卻是 V_i <=1 



alvin shih於 2013年4月19日星期五UTC+8上午8時59分22秒寫道:

Yung-Yu Chen

unread,
Apr 19, 2013, 8:20:38 AM4/19/13
to pyth...@googlegroups.com
2013/4/19 weijr <tze...@gmail.com>
照式子來看,數值計算最簡單的方式,就直接從 i=1 開始照著算。
但也得要知道 V_i 是什麼。

除了式子中 if 中的 條件重疊,

可以用 piecewise integration 處理嗎?

yyc
 
一方面說 V>=i ,式子裡面卻是 V_i <=1 



alvin shih於 2013年4月19日星期五UTC+8上午8時59分22秒寫道:

最近一個在外企工作的朋友問我python能處理期望值類的問題嗎?

我當然不加思索地就回答沒問題,所以他丟給我一段公式:

N、i為一正整數,且V>=i,求推導當N、i為已知時,如何求得Xi之期望值?



我當場倒抽一口涼氣,這是整人題目嗎?

學習python的時間仍短,我僅知scipy可處理積分的問題,不知是否有先進能提供一些想法?

目前仍在努力中...= =





--
您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW。
如需更多選項,請前往:https://groups.google.com/groups/opt_out。
 
 

Albert Chun-Chieh Huang

unread,
Apr 19, 2013, 8:25:08 AM4/19/13
to pyth...@googlegroups.com
Yung-Yu Chen <y...@solvcon.net> writes:

> 2013/4/19 weijr <tze...@gmail.com>
>
>> 照式子來看,數值計算最簡單的方式,就直接從 i=1 開始照著算。
>> 但也得要知道 V_i 是什麼。
>>
>> 除了式子中 if 中的 條件重疊,
>>
>
> 可以用 piecewise integration 處理嗎?
>
> yyc

V_i 條件重疊應該不是問題,因為第二個式子 V_i 的下界
[(n-i) + (X_1 + X_2 + ... + X_i)] / (n+1-i) 代入 X_i 的第二個式子,
得到的結果是 0, 也是第一個式子 X_i =0 的時候 V_i 的上界。

但是 V_i 是什麼就不知道了。


>
>
>> 一方面說 V>=i ,式子裡面卻是 V_i <=1
>>
>>
>>
>> alvin shih於 2013年4月19日星期五UTC+8上午8時59分22秒寫道:
>>
>>> 最近一個在外企工作的朋友問我python能處理期望值類的問題**嗎?
>>>
>>> 我當然不加思索地就回答沒問題,所以他丟給我一段公式:
>>>
>>> N、i為一正整數,且V>=i,求推導當N、i為已知時,**如何求得Xi之期望值?
>>>
>>>
>>> <https://lh4.googleusercontent.com/-uPgGLaDqdAU/UXCT4cl62tI/AAAAAAAAACo/CZThEbSKdwU/s1600/post.png>
>>>
>>>
>>> 我當場倒抽一口涼氣,這是整人題目嗎?
>>>
>>> 學習python的時間仍短,**我僅知scipy可處理積分的問題,**不知是否有先進能提供一些想法?
>>>
>>> 目前仍在努力中...= =
>>>
>>>
>>>
>>>
>>>
>>> --
>> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
>> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
>> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
>> 請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW
>> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>>
>>
>>
>
>
>
> --
> Yung-Yu Chen
> http://solvcon.net/yyc/
> +886 (99) 129 4763 (no sms)
>
> --
> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>
>
> 2013/4/19 weijr <tze...@gmail.com>
>
> 照式子來看,數值計算最簡單的方式,就直接從 i=1 開始照著算。
>
> 但也得要知道 V_i 是什麼。
>
>
> 除了式子中 if 中的條件重疊,
>
>
> 可以用 piecewise integration 處理嗎?
>
> yyc
>  
>
> 一方面說 V>=i ,式子裡面卻是 V_i <=1 
>
>
>
>
>
>
> alvin shih於 2013年4月19日星期五UTC+8上午8時59分22秒寫道:
>
> 最近一個在外企工作的朋友問我python能處理期望值類的問題
> 嗎?
>
> 我當然不加思索地就回答沒問題,所以他丟給我一段公式:
>
> N、i為一正整數,且V>=i,求推導當N、i為已知時,如何求得Xi之期望
> 值?
>
>
>
> 我當場倒抽一口涼氣,這是整人題目嗎?
>
> 學習python的時間仍短,我僅知scipy可處理積分的問題,不知是否有
> 先進能提供一些想法?
>
> 目前仍在努力中...= =
>
>
>
>
>
>
>
>
> --
> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這
> 封郵件通知您。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到
> pythontw+u...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:
> http://groups.google.com/group/pythontw?hl=zh-TW
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>  
>  
>
>
>
>
> --
> Yung-Yu Chen
> http://solvcon.net/yyc/
> +886 (99) 129 4763 (no sms)

--
Albert Chun-Chieh Huang(黃俊傑)
Blog: Random Notes, http://alberthuang314.blogspot.com/

Yung-Yu Chen

unread,
Apr 19, 2013, 7:15:43 PM4/19/13
to alvin shih, pyth...@googlegroups.com
一開始你有寫 V \ge i,是指 V_i \ge i 嗎?如 weijr 所說,式子裡卻是 V_i \le i (\forall i \in \mathrm{N})。

yyc


2013/4/19 alvin shih <alvins...@gmail.com>
乍看之下,題目可能真的不完整,我舉個例子來說好了,如果:n=3, i=1
則if 0<= V1 < 2/3 ,X1=0
if 2/3 =< V1 <= 1 ,X1= (3V1-2)/4 



再來就是將X1之值代入繼續推導X2. X3,當然,這只是n=3的情況,如果n=10,則要一步一步由X1 -> X2 -> ... -> X10,最後的X10共有2的10次方組合!!

Albert Chun-Chieh Huang

unread,
Apr 20, 2013, 1:40:51 AM4/20/13
to pyth...@googlegroups.com
Yung-Yu,

昨夜試圖推導的時候發現這個應該是筆誤, 應為 N >= i, N 如果寫草一點就會看
起來像 V 了,抄寫錯誤吧。

另外,題目也沒有說是 X_1, X_2, ..., X_n.

這是擠牙膏式的出題嗎?

Albert

Yung-Yu Chen <y...@solvcon.net> writes:

> 一開始你有寫 V \ge i,是指 V_i \ge i 嗎?如 weijr 所說,式子裡卻是 V_i \le i (\forall i \in
> \mathrm{N})。
>
> yyc
>
>
> 2013/4/19 alvin shih <alvins...@gmail.com>
>
>> 乍看之下,題目可能真的不完整,我舉個例子來說好了,如果:n=3, i=1
>> 則if 0<= V1 < 2/3 ,X1=0
>> if 2/3 =< V1 <= 1 ,X1= (3V1-2)/4
>>
>>
>> 則<https://lh3.googleusercontent.com/-aoDL2D_ZpdY/UXFglQwMCzI/AAAAAAAAAC4/XQWOotconvI/s1600/CodeCogsEqn.png>
>>
>> 再來就是將X1之值代入繼續推導X2. X3,當然,這只是n=3的情況,如果n=10,則要一步一步由X1 -> X2 -> ... ->
>> X10,最後的X10共有2的10次方組合!!
>>
>>
>
>
> --
> Yung-Yu Chen
> http://solvcon.net/yyc/
> +886 (99) 129 4763 (no sms)
>
> --
> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>
>
> 一開始你有寫 V \ge i,是指 V_i \ge i 嗎?如 weijr 所說,式子裡卻是 V_i
> \le i (\forall i \in \mathrm{N})。
>
> yyc
>
>
> 2013/4/19 alvin shih <alvins...@gmail.com>
>
> 乍看之下,題目可能真的不完整,我舉個例子來說好了,如果:n=3, i=1
> 則if 0<= V1 < 2/3 ,X1=0
> if 2/3 =< V1 <= 1 ,X1= (3V1-2)/4 
>
>
> 則
> *
>
>
>
>
> 再來就是將X1之值代入繼續推導X2. X3,當然,這只是n=3的情況,如果
> n=10,則要一步一步由X1 -> X2 -> ... -> X10,最後的X10共有2的10次方
> 組合!!
>
>
>
>
>
> --
> Yung-Yu Chen
> http://solvcon.net/yyc/
> +886 (99) 129 4763 (no sms)

weijr

unread,
Apr 20, 2013, 4:35:40 AM4/20/13
to pyth...@googlegroups.com, y...@solvcon.net
這個應該不用舉例子,yyc 只是沒看到圖,最好要寫一下如圖,不然一般來說,圖是擋住的。

就像我之前說的,如果只要數值解,照 i=1,2,3,順序就算出了。
不過,你說了 1024,我大概就瞭解你的問題在哪裡。
因為第一點, 1024 不是個很大的數字,不是很急的話,2^20 次方都還不算太難。
2^30 才開始要有點擔心。(這就是為什麼你要說清楚 N 的範圍的原因)
還有 V_i,是否為 iid,是否為 0-1 的 uniform distribution?
還是實驗或者其他方式產生來的資料?有沒有什麼假設?這些都有差。

不過既然你提到 python,我們就假設是要數值解。這個我一開始就說,不難。
你會卡住的問題出在,範圍重疊。當然我指的不是範圍重疊,而是語言的邏輯性。
以程式語言來說, if (a>=b){} elif (a<=b) {)   這樣的程式碼是不好的。
另外,你有沒有發現類似的東西重複出現了三次?
以寫程式的觀念來說,就是不好的寫法。
所以你可以讓 Y_i = sum(X_1 ... X_(i-1))   (甚至令 Y_i=n-i-sum(...) 之類的,這個要真的動手算一下才能確定哪個比較好)
然後把 X_i 全部用 Y_i 取代,這樣遞迴式就會變簡單一點。
然後這個還不夠簡化,你還可以用 max(0, .....) 來取代 if 的式子。
(變成一句話,才能變成一個觀念)
接下來,你只要知道 V_i 以及 Y_(i-1) 的 cdf ,就能簡單求出 Y_i 的 cdf 。
 2^N 多大都不要緊,因為重點只有cdf 的精確度/解析度而已,這只是簡單的積分誤差估計。
然後 E(X_i) =E(Y_i)-E(Y_(i-1))


alvin shih於 2013年4月19日星期五UTC+8下午11時26分00秒寫道:
乍看之下,題目可能真的不完整,我舉個例子來說好了,如果:n=3, i=1
則if 0<= V1 < 2/3 ,X1=0
if 2/3 =< V1 <= 1 ,X1= (3V1-2)/4 


pingooo

unread,
Apr 21, 2013, 4:23:57 PM4/21/13
to pythontw, Yung-Yu Chen
用 i = 1 代入右式求 X_1,我就碰到 X_1 + X_2 + ... + X_{i-1},可是 X_0 有定義嗎?

另外,「X_i 的期望值」這個詞我無法了解,我沒看到 X_i 的機率分佈函數,如果 X_i 不是隨機變數,何來期望值?


2013/4/20 weijr <tze...@gmail.com>

weijr

unread,
Apr 22, 2013, 1:38:22 AM4/22/13
to pyth...@googlegroups.com
數學(當然也許還有一些其他領域)的慣例是  X_1+...+X_(i-1)  當 i=1 的時候是沒有加任何東西。
類似程式語言上的 for k=1;k<i-1;k++ {} 或 range (1,1)

X 用大寫在數學(的一些領域以及一些其他領域)的慣例也是代表隨機變數。

(小領域很多,所以網路上儘可能解釋清楚較佳,當然有時有點難,因為會根本沒想到。)



pingooo於 2013年4月22日星期一UTC+8上午4時23分57秒寫道:

pingooo

unread,
Apr 23, 2013, 4:02:11 AM4/23/13
to pythontw
> 數學(當然也許還有一些其他領域)的慣例是  X_1+...+X_(i-1)  當 i=1 的時候是沒有加任何東西。
> 類似程式語言上的 for k=1;k<i-1;k++ {} 或 range (1,1)

這我欠難同意... 我雖不是數學系的,但在物理系的十幾年也幾乎天天圍繞在數學身邊。數學是嚴謹而明確(explicit)的學問,如果有慣例(convention),一定先講明。

另外,不知道機率密度或機率密度函數而要問期望值,根本是緣木求魚。

2013/4/21 weijr <tze...@gmail.com>

Yung-Yu Chen

unread,
Apr 23, 2013, 5:58:28 AM4/23/13
to pyth...@googlegroups.com
2013/4/23 pingooo <ping.n...@gmail.com>
> 數學(當然也許還有一些其他領域)的慣例是  X_1+...+X_(i-1)  當 i=1 的時候是沒有加任何東西。
> 類似程式語言上的 for k=1;k<i-1;k++ {} 或 range (1,1)

這我欠難同意... 我雖不是數學系的,但在物理系的十幾年也幾乎天天圍繞在數學身邊。數學是嚴謹而明確(explicit)的學問,如果有慣例(convention),一定先講明。


tjw 看來只是描述某些領域內既成的慣例,好像沒有表達其為應然的意思 (至少我看來是這樣)。

從工程學的角度來看,原貼文者的描述方式確實也定義不明。如果是在課堂上出出來的題目的話,大概會變成送分題?
 
另外,不知道機率密度或機率密度函數而要問期望值,根本是緣木求魚。


我在猜會不是 PDF 是原表示式中的一個 implicit function?這需要原作者解釋一下。

yyc



--

alvin shih

unread,
Apr 25, 2013, 3:19:37 AM4/25/13
to pyth...@googlegroups.com
抱歉! 因為定義上的不明,造成一些朋友們的困擾,我再重新說明一次:

N、i為一正整數,且N>=i,X_0=0
V_i 是一個均勻分配(uniform distribution)的獨立隨機變數(independently distributed random)
求推導當N、i為已知時,如何求得Xi之期望值?




目前我是打算採切割求近似的方式,似乎還比較容易些。


pingooo

unread,
Apr 25, 2013, 10:55:35 AM4/25/13
to pythontw
這問題可以用蒙地卡羅法數值解,求 X_i 的時間是 O(i) * M,M 是反覆求 X_i 值、計算期望值的次數,如果容許誤差是 10^-a,M 基本上是 O(10^{2a})。

如果覺得蒙地卡羅太慢,那就要分析給出的式子,看能不能找到部分解析、部分數值的解。

不過還是要:

<雞蛋裡挑骨頭 id="1">
問題缺 X_i 期望值的容許誤差,不然不知道算到何時停止。如果有解析解,那用什麼語言也不重要了,算式打進去跑就好。
</雞蛋裡挑骨頭 id="1">

<雞蛋裡挑骨頭 id="2">
均勻分佈還是無法求期望值,因為缺少均勻分的上下限。
</雞蛋裡挑骨頭 id="2">

<雞蛋裡挑骨頭 id="3">
式中的 X_i 部分和(partial sum),如果從 X_0 開始加,然後指明 X_i 的式子適用於 i >= 1,就沒有「上限 < 下限」的問題,而且可以涵蓋所有 i >= 1 的 X_i。
</雞蛋裡挑骨頭 id="3">


2013/4/25 alvin shih <alvins...@gmail.com>
Message has been deleted

alvin shih

unread,
Apr 30, 2013, 11:26:10 AM4/30/13
to pyth...@googlegroups.com
最近想了一下這問題,pingooo所提的蒙地卡羅法,因為沒有所謂的解析解,實在是想不出應用的方式 @@
目前初步將N=10,並切割為10等份來求近似值,但效率不是很好,看來python在迴圈的效能方面,的確不行(也有一部份是因為小弟才疏學淺吧! = =)。
完整程式如下,還望先進給予指教:

from __future__ import division

#定義n的數值
n=10

i=range(n)
x=range(n)
M=range(n)
xvalue=[]


C=0.0
#所要切割的數量
s=10

for i[0] in xrange(s+1):
    for i[1] in xrange(s+1):
        for i[2] in xrange(s+1):
             for i[3] in xrange(s+1):
                 for i[4] in xrange(s+1):
                     for i[5] in xrange(s+1):
                         for i[6] in xrange(s+1):
                             for i[7] in xrange(s+1):
                                 for i[8] in xrange(s+1):
                                     for i[9] in xrange(s+1):

                                        vArray = [p/s for p in i]

                                        x[0]=0 if vArray[0] < (n-1)/n else ( (n+1-1)*vArray[0] - (n-1) )/(n+2-1)
                                        x[1]=0 if vArray[1] < (n-2+x[0])/(n-1) else ( (n+1-2)*vArray[1] - (n-2) -x[0] )/(n+2-2)
                                        x[2]=0 if vArray[2] < (n-3+x[0]+x[1])/(n-2) else ( (n+1-3)*vArray[2] - (n-3) -x[0] -x[1] )/(n+2-3)
                                        x[3]=0 if vArray[3] < (n-4+x[0]+x[1]+x[2])/(n-3) else ( (n+1-4)*vArray[3] - (n-4) -x[0] -x[1] -x[2])/(n+2-4)
                                        x[4]=0 if vArray[4] < (n-5+x[0]+x[1]+x[2]+x[3])/(n-4) else ( (n+1-5)*vArray[4] - (n-5) -x[0] -x[1] -x[2] -x[3])/(n+2-5)
                                        x[5]=0 if vArray[5] < (n-6+x[0]+x[1]+x[2]+x[3]+x[4])/(n-5) else ( (n+1-6)*vArray[5] - (n-6) -x[0] -x[1] -x[2] -x[3] -x[4])/(n+2-6)
                                        x[6]=0 if vArray[6] < (n-7+x[0]+x[1]+x[2]+x[3]+x[4]+x[5])/(n-6) else ( (n+1-7)*vArray[6] - (n-7) -x[0] -x[1] -x[2] -x[3] -x[4] -x[5])/(n+2-7)
                                        x[7]=0 if vArray[7] < (n-8+x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6])/(n-7) else ( (n+1-8)*vArray[7] - (n-8) -x[0] -x[1] -x[2] -x[3] -x[4] -x[5] -x[6])/(n+2-8)
                                        x[8]=0 if vArray[8] < (n-9+x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7])/(n-8) else ( (n+1-9)*vArray[8] - (n-9) -x[0] -x[1] -x[2] -x[3] -x[4] -x[5] -x[6] -x[7])/(n+2-9)
                                        x[9]=0 if vArray[9] < (n-10+x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+x[8])/(n-9) else ( (n+1-10)*vArray[9] - (n-10) -x[0] -x[1] -x[2] -x[3] -x[4] -x[5] -x[6] -x[7] -x[8])/(n+2-10)

                                        M=map(lambda k,q:k+q,M,x)
                                        C+=1


print [p/(s+1)**n for p in M]
print C



Mosky Liu

unread,
May 1, 2013, 5:37:40 AM5/1/13
to pyth...@googlegroups.com
隨手 Google 了一個用 NumPy 進行 Monte Carlo 的例子,希望有幫助:


如果要用 pure Python 產生你迴圈裡的那些 case:

from itertools import product

for case in product(*[xrange(s)]*10):
    print case

在小規模測試下,這樣比你的方法快兩倍,也短的多。


pingooo

unread,
May 2, 2013, 2:03:41 AM5/2/13
to pythontw
用切割相空間的作法當然可以,但還要了解數值結果的誤差和 S 的關係為何,在 S = 10 時是多大?我以前寫數值程式時很少碰到切十份就能得到合理結果的式子。

另外一個值得思考的問題是,V_i 是隨機變數,用等間隔的數來計算,是否能正確得出期望值?我沒多想,但從 X_i 和 V_i 之間關係是非線性看來,或許會不正確。

另一個有趣的挑戰是,有沒有辦法寫出一個函式,接受 N 和 i 為輸入參數,算出 X_i,而非寫死 N = 10?


2013/5/1 Mosky Liu <mosk...@gmail.com>
Message has been deleted

alvin shih

unread,
May 2, 2013, 5:19:23 AM5/2/13
to pyth...@googlegroups.com
相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!再度見證了python的優雅!
對於程式整體的彈性上也大為增加,感謝囉!

同時我也使用底下的程式驗證了一下,也快了一成左右:
from time import time
from time import sleep
i=range(10)

start = time()
for i[0] in xrange(s+1):
    for i[1] in xrange(s+1):
        for i[2] in xrange(s+1):
             for i[3] in xrange(s+1):
                 for i[4] in xrange(s+1):
                     for i[5] in xrange(s+1):
                         for i[6] in xrange(s+1):
                             for i[7] in xrange(s+1):
                                 for i[8] in xrange(s+1):
for i[9] in xrange(s+1):
pass

cost1=time()-start

sleep(5)

start = time()
for case in product(*[xrange(s+1)]*10):
pass

cost2=time()-start
print cost1,cost2

在我所使用的電腦測試出的結果為:
2246.92600012 2014.3119998

不過這樣的結果,可能還是沒有辦法有任何實質上的效用,就如同pingooo所說,確實僅切十份是得不到合理的結果的。
目前徒手積分出來的結果,N值至少要49以上,才能求得小數點下二位的精準度,所以我現行還是用C將整個程式改寫了!

monte carlo的方式,在google上搜尋到的,就如同mosky所提的一樣,都是使用pi為範例,目前還想不到要如何應用在此式上。
而由於V_i~U[0,1],所以以此方式來求得之期望值,應該還算接近結果才是(同時也抱歉的是,這一點也是先前pingooo指正未明確定義之處)。
至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受分割值之輸入(超爛!= =)

但,mosky的解法,指引了我一盞明燈,或許不是一個不可行的方式,但效能依然是個bottleneck啊!

Albert Chun-Chieh Huang

unread,
May 2, 2013, 5:24:09 AM5/2/13
to pyth...@googlegroups.com
Hi,

Monte Carlo 在積分上的應用,我最近在 Christian P. Robert 的 "Monte Carlo
Statistical Method" 上有看到一章是 "Monte Carlo Integration"。我也正在看
前面的章節,還沒看到後面的,不過有投影片可以參考一下:
http://www.ceremade.dauphine.fr/~xian/coursMC.pdf


Best Regards,

Albert
> --
> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>
>
> 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!再度見證了python
> 的優雅!

Mosky Liu

unread,
May 2, 2013, 10:40:06 PM5/2/13
to pyth...@googlegroups.com
嗯 ... s 變大的時候,效能就沒那麼好了。

應該還是要用 NumPy 算效果會比較好吧 :)。

是之前有用 product 這個技巧來解線性方程組的離散解,還滿好用,就順手 po 一下 :P。


alvin shih <alvins...@gmail.com> 於 2013年5月2日下午5:16 寫道:
相較於mosky的方式,還真有如野生的土坏之於精緻小洋房啊!再度見證了python的優雅!

weijr

unread,
May 3, 2013, 4:01:18 AM5/3/13
to pyth...@googlegroups.com

Monte Carlo 並非不好,但只能算是底線(還有很好的驗算/除錯工具)。
粗看題目是 n 維空間,但就如我前面已經寫過,遞迴關係一個一個算就可以把維度拉平,
變成 n 個低維度的問題。粗看之下每個積分都是二維的,(V, Y=\sum X_i)
但既然 V 是 uniform,原則上這一個積分可以直接積出,所以只剩一個一維積分。
剛才真的算了一下,的確如此。

另外 please keep it DRY,  don't WET(write everything ten-times) yourself.
除了寫起來很辛苦外,也會影響你的理解,就像原來的式子,東西也重複三次(這點前面也寫過)。

給原 PO 的建議
1 靠你自己,而不是 compiler/numpy,想辦法將你現在的 python 程式碼速度增加十倍。
2 真正理解一下 Monte Carlo 的意義,然後用在這裡。
3 如果真的有興趣,可以了解一下重積分、CDF、數值積分。

Albert Huang於 2013年5月2日星期四UTC+8下午5時24分09秒寫道:

pingooo

unread,
May 3, 2013, 4:08:31 AM5/3/13
to pythontw
補充一下...

太久沒算有點記不得細節,但在多維度積分的問題裡,蒙地卡羅和分割相空間兩種算法,在高於三維(吧?)的時候,蒙地卡羅其實收歛得比較快。


2013/5/3 weijr <tze...@gmail.com>

weijr

unread,
May 3, 2013, 7:24:40 AM5/3/13
to pyth...@googlegroups.com
如果是取中點的話,是 >=3 沒有錯。Simpson 應該就是 >=9。不過這牽扯到函數的性質。
蒙地卡羅就猛在根本不管函數的性質,像圍棋這種說不清楚的也適用。

pingooo於 2013年5月3日星期五UTC+8下午4時08分31秒寫道:

Albert Chun-Chieh Huang

unread,
May 3, 2013, 7:47:41 AM5/3/13
to pyth...@googlegroups.com
weijr and pingooo,

在這裡趕緊請教二位,數值方法與 Monte Carlo 分別該看哪一本書比較適合入門?
數值方法我還沒找到,Monte Carlo 的有 Christian P. Robert 的 "Monte Carlo
Statistical Method" 不過這本因為台灣目前沒有,需要從 Amazon 直接訂購,所
以先請教一下這本適合與否。

謝謝二位的推薦!

Albert


weijr <tze...@gmail.com> writes:

> 如果是取中點的話,是 >=3 沒有錯。Simpson 應該就是 >=9。不過這牽扯到函數的性質。
> 蒙地卡羅就猛在根本不管函數的性質,像圍棋這種說不清楚的也適用。
>
> pingooo於 2013年5月3日星期五UTC+8下午4時08分31秒寫道:
>>
>> 補充一下...
>>
>> 太久沒算有點記不得細節,但在多維度積分的問題裡,蒙地卡羅和分割相空間兩種算法,在高於三維(吧?)的時候,蒙地卡羅其實收歛得比較快。
>>
>>
>> 2013/5/3 weijr <tze...@gmail.com <javascript:>>
>>
>>>
>>> Monte Carlo 並非不好,但只能算是底線(還有很好的驗算/除錯工具)。
>>> 粗看題目是 n 維空間,但就如我前面已經寫過,遞迴關係一個一個算就可以把維度拉平,
>>> 變成 n 個低維度的問題。粗看之下每個積分都是二維的,(V, Y=\sum X_i)
>>> 但既然 V 是 uniform,原則上這一個積分可以直接積出,所以只剩一個一維積分。
>>> 剛才真的算了一下,的確如此。
>>>
>>> 另外 please keep it DRY, don't WET(write everything ten-times) yourself.
>>> 除了寫起來很辛苦外,也會影響你的理解,就像原來的式子,東西也重複三次(這點前面也寫過)。
>>>
>>> 給原 PO 的建議
>>> 1 靠你自己,而不是 compiler/numpy,想辦法將你現在的 python 程式碼速度增加十倍。
>>> 2 真正理解一下 Monte Carlo 的意義,然後用在這裡。
>>> 3 如果真的有興趣,可以了解一下重積分、CDF、數值積分。
>>>
>>> Albert Huang於 2013年5月2日星期四UTC+8下午5時24分09秒寫道:
>>>>
>>>> Hi,
>>>>
>>>> Monte Carlo 在積分上的應用,我最近在 Christian P. Robert 的 "Monte Carlo
>>>> Statistical Method" 上有看到一章是 "Monte Carlo Integration"。我也正在看
>>>> 前面的章節,還沒看到後面的,不過有投影片可以參考一下:
>>>> http://www.ceremade.dauphine.**fr/~xian/coursMC.pdf<http://www.ceremade.dauphine.fr/~xian/coursMC.pdf>
>>>>
>>>>
>>>> Best Regards,
>>>>
>>>> Albert
>>>>
>>>>
>>>>
>>>> alvin shih <alvins...@gmail.com> writes:
>>>>
>>>> > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!**再度見證了python的優雅!
>>>> > 不過這樣的結果,可能還是沒有辦法有任何實質上的效用,**就如同pingooo所說,確實僅切十份是得不到合理的結果的。
>>>> > 目前徒手積分出來的結果,N值至少要49以上,**才能求得小數點下二位的精準度,**所以我現行還是用C將整個程式改寫了!
>>>> >
>>>> > monte carlo的方式,在google上搜尋到的,**就如同mosky所提的一樣,都是使用pi為範例,**目前還想不到要如何應用在此式上。
>>>>
>>>> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,**應該還算接近結果才是(同時也抱歉的是,**這一點也是先前pingooo指正未明確定義之處)。
>>>>
>>>> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受分割值之輸入(超爛!= =)
>>>> >
>>>> > 但,mosky的解法,指引了我一盞明燈,**或許不是一個不可行的方式,**但效能依然是個bottleneck啊!
>>>> >
>>>> > --
>>>> > 您已訂閱「Google 網上論壇」的「python.tw」群組,**因此我們特別傳送這封郵件通知您。
>>>> > 如要取消訂閱這個群組並停止接收來自這個群組的郵件,**請傳送電子郵件到 pythontw+u...@**googlegroups.com
>>>> > 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
>>>> > 請前往以下網址造訪這個群組:http://groups.**google.com/group/pythontw?hl=**zh-TW<http://groups.google.com/group/pythontw?hl=zh-TW>。
>>>>
>>>> > 如需更多選項,請前往:https://groups.**google.com/groups/opt_out<https://groups.google.com/groups/opt_out>。
>>>>
>>>> >
>>>> >
>>>> > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!**再度見證了python
>>>> > 不過這樣的結果,可能還是沒有辦法有任何實質上的效用,**就如同pingooo所說,
>>>> > 確實僅切十份是得不到合理的結果的。
>>>> > 目前徒手積分出來的結果,N值至少要49以上,**才能求得小數點下二位的精準度,
>>>> > 所以我現行還是用C將整個程式改寫了!
>>>> >
>>>> > monte carlo的方式,在google上搜尋到的,**就如同mosky所提的一樣,都是使用
>>>> > pi為範例,目前還想不到要如何應用在此式上。
>>>> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,**應該還算接近結果才是(同
>>>> > 時也抱歉的是,**這一點也是先前pingooo指正未明確定義之處)。
>>>> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受分割值之輸入
>>>> > (超爛!= =)
>>>> >
>>>> > 但,mosky的解法,指引了我一盞明燈,**或許不是一個不可行的方式,但效能依
>>>> > 然是個bottleneck啊!
>>>>
>>>> --
>>>> Albert Chun-Chieh Huang(黃俊傑)
>>>> Blog: Random Notes, http://alberthuang314.**blogspot.com/<http://alberthuang314.blogspot.com/>
>>>>
>>> --
>>> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
>>> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com<javascript:>
>>> 。
>>> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com <javascript:>。
>>> 請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW
>>> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>>>
>>>
>>>
>>
>>
>
> --
> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>
>
> > monte carlo的方式,在google上搜尋到的,就如同mosky所提的
> 一樣,都是使用pi為範例,目前還想不到要如何應用在此式上。
> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,應該還算接
> 近結果才是(同時也抱歉的是,這一點也是先前pingooo指正未明確
> 定義之處)。
> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受
> 分割值之輸入(超爛!= =)
> >
> > 但,mosky的解法,指引了我一盞明燈,或許不是一個不可行的
> 方式,但效能依然是個bottleneck啊!
> >
> > --
> > for i[9] in xrange(s+1):
> > pass
> >
> > cost1=time()-start
> >
> > sleep(5)
> >
> > start = time()
> > for case in product(*[xrange(s+1)]*10):
> > pass
> >
> > cost2=time()-start
> > print cost1,cost2
> >
> > 在我所使用的電腦測試出的結果為:
> > 2246.92600012 2014.3119998
> >
> > 不過這樣的結果,可能還是沒有辦法有任何實質上的效用,就如
> 同pingooo所說,
> > 確實僅切十份是得不到合理的結果的。
> > 目前徒手積分出來的結果,N值至少要49以上,才能求得小數點
> 下二位的精準度,
> > 所以我現行還是用C將整個程式改寫了!
> >
> > monte carlo的方式,在google上搜尋到的,就如同mosky所提的
> 一樣,都是使用
> > pi為範例,目前還想不到要如何應用在此式上。
> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,應該還算接
> 近結果才是(同
> > 時也抱歉的是,這一點也是先前pingooo指正未明確定義之處)。
> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受
> 分割值之輸入
> > (超爛!= =)
> >
> > 但,mosky的解法,指引了我一盞明燈,或許不是一個不可行的
> 方式,但效能依
> > 然是個bottleneck啊!
>
> --
> Albert Chun-Chieh Huang(黃俊傑)
> Blog: Random Notes, http://alberthuang314.blogspot.com/
>
>
>
> --
> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳
> 送這封郵件通知您。
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵
> 件到 pythontw+u...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至
> pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:
> http://groups.google.com/group/pythontw?hl=zh-TW
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>  
>  

weijr

unread,
May 6, 2013, 5:33:40 AM5/6/13
to pyth...@googlegroups.com, Albert Chun-Chieh Huang
我只有大學程度的數值計算,所以也談不上什麼推薦。
不過如果圖書館有的話,可以先翻翻看。

Albert Huang於 2013年5月3日星期五UTC+8下午7時47分41秒寫道:

pingooo

unread,
May 6, 2013, 10:35:12 PM5/6/13
to pythontw, Albert Chun-Chieh Huang
搜尋一下各大學相關課程的課本?


2013/5/6 weijr <tze...@gmail.com>

Albert Chun-Chieh Huang

unread,
May 7, 2013, 9:02:32 AM5/7/13
to pingooo, pythontw
嗯,那就謝謝二位的 comment. Monte Carlo 就維持那本了,數值就慢慢再找,在
此也順便跟這個 mailing list 上有興趣的人報告一下剛剛發現的有趣文章當作起
點:http://w3.math.sinica.edu.tw/math_media/d171/17102.pdf


pingooo <ping.n...@gmail.com> writes:

> 搜尋一下各大學相關課程的課本?
>
>
> 2013/5/6 weijr <tze...@gmail.com>
>
>> 我只有大學程度的數值計算,所以也談不上什麼推薦。
>> 不過如果圖書館有的話,可以先翻翻看。
>>
>> Albert Huang於 2013年5月3日星期五UTC+8下午7時47分41秒寫道:
>>>
>>> weijr and pingooo,
>>>
>>> 在這裡趕緊請教二位,數值方法與 Monte Carlo 分別該看哪一本書比較適合入門?
>>> 數值方法我還沒找到,Monte Carlo 的有 Christian P. Robert 的 "Monte Carlo
>>> Statistical Method" 不過這本因為台灣目前沒有,需要從 Amazon 直接訂購,所
>>> 以先請教一下這本適合與否。
>>>
>>> 謝謝二位的推薦!
>>>
>>> Albert
>>>
>>>
>>> weijr <tze...@gmail.com> writes:
>>>
>>> > 如果是取中點的話,是 >=3 沒有錯。Simpson 應該就是 >=9。不過這牽扯到函數的性質。
>>> > 蒙地卡羅就猛在根本不管函數的性質,**像圍棋這種說不清楚的也適用。
>>> >
>>> > pingooo於 2013年5月3日星期五UTC+8下午4時08分31秒寫道:
>>> >>
>>> >> 補充一下...
>>> >>
>>> >> 太久沒算有點記不得細節,但在多維度積分的問題裡,**蒙地卡羅和分割相空間兩種算法,在高於三維(吧?)的時候,**蒙地卡羅其實收歛得比較快。
>>> >>
>>> >>
>>> >> 2013/5/3 weijr <tze...@gmail.com <javascript:>>
>>> >>
>>> >>>
>>> >>> Monte Carlo 並非不好,但只能算是底線(還有很好的驗算/除錯工具)。
>>> >>> 粗看題目是 n 維空間,但就如我前面已經寫過,**遞迴關係一個一個算就可以把維度拉平,
>>> >>> 變成 n 個低維度的問題。粗看之下每個積分都是二維的,(V, Y=\sum X_i)
>>> >>> 但既然 V 是 uniform,原則上這一個積分可以直接積出,**所以只剩一個一維積分。
>>> >>> 剛才真的算了一下,的確如此。
>>> >>>
>>> >>> 另外 please keep it DRY, don't WET(write everything ten-times)
>>> yourself.
>>> >>> 除了寫起來很辛苦外,也會影響你的理解,就像原來的式子,**東西也重複三次(這點前面也寫過)。
>>> >>>
>>> >>> 給原 PO 的建議
>>> >>> 1 靠你自己,而不是 compiler/numpy,想辦法將你現在的 python 程式碼速度增加十倍。
>>> >>> 2 真正理解一下 Monte Carlo 的意義,然後用在這裡。
>>> >>> 3 如果真的有興趣,可以了解一下重積分、CDF、數值積分。
>>> >>>
>>> >>> Albert Huang於 2013年5月2日星期四UTC+8下午5時24分09秒寫道:
>>> >>>>
>>> >>>> Hi,
>>> >>>>
>>> >>>> Monte Carlo 在積分上的應用,我最近在 Christian P. Robert 的 "Monte Carlo
>>> >>>> Statistical Method" 上有看到一章是 "Monte Carlo Integration"。我也正在看
>>> >>>> 前面的章節,還沒看到後面的,不過有投影片可以參考一下:
>>> >>>> http://www.ceremade.dauphine.****fr/~xian/coursMC.pdf<http://**
>>> www.ceremade.dauphine.fr/~**xian/coursMC.pdf<http://www.ceremade.dauphine.fr/~xian/coursMC.pdf>>
>>>
>>> >>>>
>>> >>>>
>>> >>>> Best Regards,
>>> >>>>
>>> >>>> Albert
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> alvin shih <alvins...@gmail.com> writes:
>>> >>>>
>>> >>>> > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!****再度見證了python的優雅!
>>> >>>> > 不過這樣的結果,可能還是沒有辦法有任何實質上的效用,****就如同pingooo所說,確實僅切十份是得不到合理的結果的。
>>> >>>> > 目前徒手積分出來的結果,N值至少要49以上,****才能求得小數點下二位的精準度,****所以我現行還是用C將整個程式改寫了!
>>> >>>> >
>>> >>>> > monte carlo的方式,在google上搜尋到的,****就如同mosky所提的一樣,都是使用pi為範例,****目前還想不到要如何應用在此式上。
>>>
>>> >>>>
>>> >>>> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,****應該還算接近結果才是(同時也抱歉的是,****這一點也是先前pingooo指正未明確定義之處)。
>>>
>>> >>>>
>>> >>>> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受分割值之輸入(超爛!= =)
>>> >>>> >
>>> >>>> > 但,mosky的解法,指引了我一盞明燈,****或許不是一個不可行的方式,****但效能依然是個bottleneck啊!
>>> >>>> >
>>> >>>> > --
>>> >>>> > 您已訂閱「Google 網上論壇」的「python.tw」群組,****因此我們特別傳送這封郵件通知您。
>>> >>>> > 如要取消訂閱這個群組並停止接收來自這個群組的郵件,****請傳送電子郵件到 pythontw+u...@**
>>> googlegroups.**com <http://googlegroups.com>。
>>> >>>> > 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
>>> >>>> > 請前往以下網址造訪這個群組:http://groups.****google.com/group/pythontw?hl=***
>>> *zh-TW <http://google.com/group/pythontw?hl=**zh-TW><
>>> http://groups.google.**com/group/pythontw?hl=zh-TW<http://groups.google.com/group/pythontw?hl=zh-TW>>。
>>>
>>> >>>>
>>> >>>> > 如需更多選項,請前往:https://groups.**go**ogle.com/groups/opt_out<http://google.com/groups/opt_out>
>>> <https:**//groups.google.com/groups/**opt_out<https://groups.google.com/groups/opt_out>>。
>>>
>>> >>>>
>>> >>>> >
>>> >>>> >
>>> >>>> > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!****再度見證了python
>>> >>>> > 不過這樣的結果,可能還是沒有辦法有任何實質上的效用,****就如同pingooo所說,
>>> >>>> > 確實僅切十份是得不到合理的結果的。
>>> >>>> > 目前徒手積分出來的結果,N值至少要49以上,****才能求得小數點下二位的精準度,
>>> >>>> > 所以我現行還是用C將整個程式改寫了!
>>> >>>> >
>>> >>>> > monte carlo的方式,在google上搜尋到的,****就如同mosky所提的一樣,都是使用
>>> >>>> > pi為範例,目前還想不到要如何應用在此式上。
>>> >>>> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,****應該還算接近結果才是(同
>>> >>>> > 時也抱歉的是,****這一點也是先前pingooo指正未明確定義之處)。
>>> >>>> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受分割值之輸入
>>> >>>> > (超爛!= =)
>>> >>>> >
>>> >>>> > 但,mosky的解法,指引了我一盞明燈,****或許不是一個不可行的方式,但效能依
>>> >>>> > 然是個bottleneck啊!
>>> >>>>
>>> >>>> --
>>> >>>> Albert Chun-Chieh Huang(黃俊傑)
>>> >>>> Blog: Random Notes, http://alberthuang314.**blogsp**ot.com/<http://blogspot.com/>
>>> >>> 您已訂閱「Google 網上論壇」的「python.tw」群組,**因此我們特別傳送這封郵件通知您。
>>> >>> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,**請傳送電子郵件到 pythontw+u...@googlegroups.com**<javascript:>
>>>
>>> >>> 。
>>> >>> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com <javascript:>。
>>> >>> 請前往以下網址造訪這個群組:http://groups.**google.com/group/pythontw?hl=**zh-TW<http://groups.google.com/group/pythontw?hl=zh-TW>。
>>>
>>> >>> 如需更多選項,請前往:https://groups.**google.com/groups/opt_out<https://groups.google.com/groups/opt_out>。
>>>
>>> >>>
>>> >>>
>>> >>>
>>> >>
>>> >>
>>> >
>>> > --
>>> > 您已訂閱「Google 網上論壇」的「python.tw」群組,**因此我們特別傳送這封郵件通知您。
>>> > 如要取消訂閱這個群組並停止接收來自這個群組的郵件,**請傳送電子郵件到 pythontw+u...@**googlegroups.com
>>> > 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
>>> > 請前往以下網址造訪這個群組:http://groups.**google.com/group/pythontw?hl=**zh-TW<http://groups.google.com/group/pythontw?hl=zh-TW>。
>>>
>>> > 如需更多選項,請前往:https://groups.**google.com/groups/opt_out<https://groups.google.com/groups/opt_out>。
>>>
>>> >
>>> >
>>> > 如果是取中點的話,是 >=3 沒有錯。Simpson 應該就是 >=9。不過這牽扯到函
>>> > 數的性質。
>>> > 蒙地卡羅就猛在根本不管函數的性質,**像圍棋這種說不清楚的也適用。
>>> >
>>> > pingooo於 2013年5月3日星期五UTC+8下午4時08分31秒寫道:
>>> >
>>> >
>>> > 補充一下...
>>> >
>>> >
>>> > 太久沒算有點記不得細節,但在多維度積分的問題裡,**蒙地卡羅和分割相空
>>> > 間兩種算法,在高於三維(吧?)的時候,**蒙地卡羅其實收歛得比較快。
>>> >
>>> >
>>> >
>>> > 2013/5/3 weijr <tze...@gmail.com>
>>> >
>>> >
>>> > Monte Carlo 並非不好,但只能算是底線(還有很好的驗算/除錯工具)。
>>> > 粗看題目是 n 維空間,但就如我前面已經寫過,遞迴關係一個一個算
>>> > 就可以把維度拉平,
>>> > 變成 n 個低維度的問題。粗看之下每個積分都是二維的,(V, Y=\sum
>>> > X_i)
>>> > 但既然 V 是 uniform,原則上這一個積分可以直接積出,所以只剩一
>>> > 個一維積分。
>>> > 剛才真的算了一下,的確如此。
>>> >
>>> > 另外 please keep it DRY, don't WET(write everything
>>> > ten-times) yourself.
>>> > 除了寫起來很辛苦外,也會影響你的理解,就像原來的式子,**東西也重
>>> > 複三次(這點前面也寫過)。
>>> >
>>> > 給原 PO 的建議
>>> > 1 靠你自己,而不是 compiler/numpy,想辦法將你現在的 python 程
>>> > 式碼速度增加十倍。
>>> > 2 真正理解一下 Monte Carlo 的意義,然後用在這裡。
>>> > 3 如果真的有興趣,可以了解一下重積分、CDF、數值積分。
>>> >
>>> > Albert Huang於 2013年5月2日星期四UTC+8下午5時24分09秒寫道:
>>> >
>>> >
>>> > Hi,
>>> >
>>> > Monte Carlo 在積分上的應用,我最近在 Christian P. Robert
>>> > 的 "Monte Carlo
>>> > Statistical Method" 上有看到一章是 "Monte Carlo
>>> > Integration"。我也正在看
>>> > 前面的章節,還沒看到後面的,不過有投影片可以參考一下:
>>> > http://www.ceremade.dauphine.**fr/~xian/coursMC.pdf<http://www.ceremade.dauphine.fr/~xian/coursMC.pdf>
>>> >
>>> >
>>> > Best Regards,
>>> >
>>> > Albert
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > alvin shih <alvins...@gmail.com> writes:
>>> >
>>> > > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!**再
>>> > 度見證了python的優雅!
>>> > > 對於程式整體的彈性上也大為增加,感謝囉!
>>> > >
>>> > > monte carlo的方式,在google上搜尋到的,**就如同mosky所提的
>>> > 一樣,都是使用pi為範例,目前還想不到要如何應用在此式上。
>>> > > 而由於V_i~U[0,1],所以以此方式來求得之期望值,**應該還算接
>>> > 近結果才是(同時也抱歉的是,**這一點也是先前pingooo指正未明確
>>> > 定義之處)。
>>> > > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受
>>> > 分割值之輸入(超爛!= =)
>>> > >
>>> > > 但,mosky的解法,指引了我一盞明燈,或許不是一個不可行的
>>> > 方式,但效能依然是個bottleneck啊!
>>> > >
>>> > > --
>>> > > 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們
>>> > 特別傳送這封郵件通知您。
>>> >
>>> > > 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送
>>> > 電子郵件到 pythontw+u...@googlegroups.com**。
>>> > > 如要在此群組張貼留言,請傳送電子郵件至
>>> > pyth...@googlegroups.com
>>> >
>>> >
>>> > > 請前往以下網址造訪這個群組:
>>> > http://groups.google.com/**group/pythontw?hl=zh-TW<http://groups.google.com/group/pythontw?hl=zh-TW>。
>>>
>>> > > 如需更多選項,請前往:
>>> > https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>。
>>>
>>> > >
>>> > >
>>> > > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊!**再
>>> > > monte carlo的方式,在google上搜尋到的,**就如同mosky所提的
>>> > 一樣,都是使用
>>> > > pi為範例,目前還想不到要如何應用在此式上。
>>> > > 而由於V_i~U[0,1],所以以此方式來求得之期望值,**應該還算接
>>> > 近結果才是(同
>>> > > 時也抱歉的是,**這一點也是先前pingooo指正未明確定義之處)。
>>> > > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接受
>>> > 分割值之輸入
>>> > > (超爛!= =)
>>> > >
>>> > > 但,mosky的解法,指引了我一盞明燈,或許不是一個不可行的
>>> > 方式,但效能依
>>> > > 然是個bottleneck啊!
>>> >
>>> > --
>>> > Albert Chun-Chieh Huang(黃俊傑)
>>> > Blog: Random Notes, http://alberthuang314.**blogspot.com/<http://alberthuang314.blogspot.com/>
>>> >
>>> >
>>> >
>>> > --
>>> > 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳
>>> > 送這封郵件通知您。
>>> > 如要取消訂閱這個群組並停止接收來自這個群組的郵件,**請傳送電子郵
>>> > 件到 pythontw+u...@googlegroups.com**。
>>> > 如要在此群組張貼留言,請傳送電子郵件至
>>> > pyth...@googlegroups.com
>>> > 請前往以下網址造訪這個群組:
>>> > http://groups.google.com/**group/pythontw?hl=zh-TW<http://groups.google.com/group/pythontw?hl=zh-TW>。
>>>
>>> > 如需更多選項,請前往:https://groups.**google.com/groups/opt_out<https://groups.google.com/groups/opt_out>。
>>>
>>> >
>>> >
>>>
>>> --
>>> Albert Chun-Chieh Huang(黃俊傑)
>>> Blog: Random Notes, http://alberthuang314.**blogspot.com/<http://alberthuang314.blogspot.com/>
>>>
>> --
>> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別傳送這封郵件通知您。
>> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
>> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
>> 請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw?hl=zh-TW
>> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>>
>>
>>
> 搜尋一下各大學相關課程的課本?
>
>
> 2013/5/6 weijr <tze...@gmail.com>
>
> 我只有大學程度的數值計算,所以也談不上什麼推薦。
> 不過如果圖書館有的話,可以先翻翻看。
>
> Albert Huang於 2013年5月3日星期五UTC+8下午7時47分41秒寫道:
>
>
> weijr and pingooo,
>
> 在這裡趕緊請教二位,數值方法與 Monte Carlo 分別該看哪一本書比
> 較適合入門?
> 數值方法我還沒找到,Monte Carlo 的有 Christian P. Robert 的
> "Monte Carlo
> Statistical Method" 不過這本因為台灣目前沒有,需要從 Amazon 直
> 接訂購,所
> 以先請教一下這本適合與否。
>
> 謝謝二位的推薦!
>
> Albert
>
>
>
>
> weijr <tze...@gmail.com> writes:
>
> > 如果是取中點的話,是 >=3 沒有錯。Simpson 應該就是 >=9。不過
> 這牽扯到函數的性質。
> > 蒙地卡羅就猛在根本不管函數的性質,像圍棋這種說不清楚的也適用。
> >
> > pingooo於 2013年5月3日星期五UTC+8下午4時08分31秒寫道:
> >>
> >> 補充一下...
> >>
> >> 太久沒算有點記不得細節,但在多維度積分的問題裡,蒙地卡羅和
> 分割相空間兩種算法,在高於三維(吧?)的時候,蒙地卡羅其實收歛
> 得比較快。
> >>
> >>
> >> 2013/5/3 weijr <tze...@gmail.com <javascript:>>
> >>
> >>>
> >>> Monte Carlo 並非不好,但只能算是底線(還有很好的驗算/除錯
> 工具)。
> >>> 粗看題目是 n 維空間,但就如我前面已經寫過,遞迴關係一個一
> 個算就可以把維度拉平,
> >>> 變成 n 個低維度的問題。粗看之下每個積分都是二維的,(V,
> Y=\sum X_i)
> >>> 但既然 V 是 uniform,原則上這一個積分可以直接積出,所以只
> 剩一個一維積分。
> >>> 剛才真的算了一下,的確如此。
> >>>
> >>> 另外 please keep it DRY,  don't WET(write everything
> ten-times) yourself.
> >>> 除了寫起來很辛苦外,也會影響你的理解,就像原來的式子,東西
> 也重複三次(這點前面也寫過)。
> >>>
> >>> 給原 PO 的建議
> >>> 1 靠你自己,而不是 compiler/numpy,想辦法將你現在的 python
> 程式碼速度增加十倍。
> >>> 2 真正理解一下 Monte Carlo 的意義,然後用在這裡。
> >>> 3 如果真的有興趣,可以了解一下重積分、CDF、數值積分。
> >>>
> >>> Albert Huang於 2013年5月2日星期四UTC+8下午5時24分09秒寫道:
> >>>>
> >>>> Hi,
> >>>>
> >>>> Monte Carlo 在積分上的應用,我最近在 Christian P. Robert
> 的 "Monte Carlo
> >>>> Statistical Method" 上有看到一章是 "Monte Carlo
> Integration"。我也正在看
> >>>> 前面的章節,還沒看到後面的,不過有投影片可以參考一下:
> >>>>
> http://www.ceremade.dauphine.**fr/~xian/coursMC.pdf<http://www.
> ceremade.dauphine.fr/~xian/coursMC.pdf>
> >>>>
> >>>>
> >>>> Best Regards,
> >>>>
> >>>> Albert
> >>>>
> >>>>
> >>>>
> >>>> alvin shih <alvins...@gmail.com> writes:
> >>>>
> >>>> > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊
> !**再度見證了python的優雅!
> >>>> > 對於程式整體的彈性上也大為增加,感謝囉!
> >>>> >
> >>>> > 不過這樣的結果,可能還是沒有辦法有任何實質上的效用,**
> 就如同pingooo所說,確實僅切十份是得不到合理的結果的。
> >>>> > 目前徒手積分出來的結果,N值至少要49以上,**才能求得小數
> 點下二位的精準度,**所以我現行還是用C將整個程式改寫了!
> >>>> >
> >>>> > monte carlo的方式,在google上搜尋到的,**就如同mosky所
> 提的一樣,都是使用pi為範例,**目前還想不到要如何應用在此式上。
> >>>>
> >>>> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,**應該還
> 算接近結果才是(同時也抱歉的是,**這一點也是先前pingooo指正未明
> 確定義之處)。
> >>>>
> >>>> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接
> 受分割值之輸入(超爛!= =)
> >>>> >
> >>>> > 但,mosky的解法,指引了我一盞明燈,**或許不是一個不可行
> 的方式,**但效能依然是個bottleneck啊!
> >>>> >
> >>>> > --
> >>>> > 您已訂閱「Google 網上論壇」的「python.tw」群組,**因此
> 我們特別傳送這封郵件通知您。
> >>>> > 如要取消訂閱這個群組並停止接收來自這個群組的郵件,**請
> 傳送電子郵件到 pythontw+u...@**googlegroups.com
> >>>> > 如要在此群組張貼留言,請傳送電子郵件至
> pyth...@googlegroups.com
> >>>> > 請前往以下網址造訪這個群組:
> http://groups.**google.com/group/pythontw?hl=**zh-TW<http://groups.
> google.com/group/pythontw?hl=zh-TW>。
> >>>>
> >>>> > 如需更多選項,請前往:
> https://groups.**google.com/groups/opt_out<https://groups.google.
> com/groups/opt_out>。
> >>>>
> >>>> >
> >>>> >
> >>>> > 相較於mosky的方式,還真有如野地的土坯之於精緻小洋房啊
> !**再度見證了python
> >>>> > 不過這樣的結果,可能還是沒有辦法有任何實質上的效用,**
> 就如同pingooo所說,
> >>>> > 確實僅切十份是得不到合理的結果的。
> >>>> > 目前徒手積分出來的結果,N值至少要49以上,**才能求得小數
> 點下二位的精準度,
> >>>> > 所以我現行還是用C將整個程式改寫了!
> >>>> >
> >>>> > monte carlo的方式,在google上搜尋到的,**就如同mosky所
> 提的一樣,都是使用
> >>>> > pi為範例,目前還想不到要如何應用在此式上。
> >>>> > 而由於V_i~U[0,1],所以以此方式來求得之期望值,**應該還
> 算接近結果才是(同
> >>>> > 時也抱歉的是,**這一點也是先前pingooo指正未明確定義之處
> )。
> >>>> > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目前僅能接
> 受分割值之輸入
> >>>> > (超爛!= =)
> >>>> >
> >>>> > 但,mosky的解法,指引了我一盞明燈,**或許不是一個不可行
> 的方式,但效能依
> >>>> > 然是個bottleneck啊!
> >>>>
> >>>> --
> >>>> Albert Chun-Chieh Huang(黃俊傑)
> >>>> Blog: Random Notes,
> http://alberthuang314.**blogspot.com/<http://alberthuang314.blogspot.
> com/>
> >>>>
> >>>  --
> >>> 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特
> 別傳送這封郵件通知您。
> >>> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電
> 子郵件到 pythontw+u...@googlegroups.com<javascript:>
> >>> 。
> >>> 如要在此群組張貼留言,請傳送電子郵件至
> pyth...@googlegroups.com <javascript:>。
> >>> 請前往以下網址造訪這個群組:
> http://groups.google.com/group/pythontw?hl=zh-TW
> >>> 如需更多選項,請前往:
> https://groups.google.com/groups/opt_out
> >>>  
> >>>  
> >>>
> >>
> >>
> >
> > --
> > 您已訂閱「Google 網上論壇」的「python.tw」群組,因此我們特別
> 傳送這封郵件通知您。
>
> > 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子
> >             Hi,
> >            
> >             Monte Carlo 在積分上的應用,我最近在 Christian
> P. Robert
> >             的 "Monte Carlo
> >             Statistical Method" 上有看到一章是 "Monte Carlo
> >             Integration"。我也正在看
> >             前面的章節,還沒看到後面的,不過有投影片可以參考
> 一下:
> >            
> http://www.ceremade.dauphine.fr/~xian/coursMC.pdf
> >            
> >            
> >             Best Regards,
> >            
> >             Albert
> >            
> >            
> >            
> >            
> >            
> >             alvin shih <alvins...@gmail.com> writes:
> >            
> >             > 相較於mosky的方式,還真有如野地的土坯之於精緻
> 小洋房啊!再
> >             度見證了python的優雅!
> >             > 對於程式整體的彈性上也大為增加,感謝囉!
> >             >
> >             > 同時我也使用底下的程式驗證了一下,也快了一成左
> 右:
> >             > from time import time
> >             > from time import sleep
> >             > i=range(10)
> >             >
> >             > start = time()
> >             > for i[0] in xrange(s+1):
> >             >     for i[1] in xrange(s+1):
> >             >         for i[2] in xrange(s+1):
> >             >              for i[3] in xrange(s+1):
> >             >                  for i[4] in xrange(s+1):
> >             >                      for i[5] in xrange(s+1):
> >             >                          for i[6] in xrange
> (s+1):
> >             >                              for i[7] in
> xrange(s+1):
> >             >                                  for i[8] in
> xrange
> >             (s+1):
> >             > for i[9] in xrange(s+1):
> >             > pass
> >             >
> >             > cost1=time()-start
> >             >
> >             > sleep(5)
> >             >
> >             > start = time()
> >             > for case in product(*[xrange(s+1)]*10):
> >             > pass
> >             >
> >             > cost2=time()-start
> >             > print cost1,cost2
> >             >
> >             > 在我所使用的電腦測試出的結果為:
> >             > 2246.92600012 2014.3119998
> >             >
> >             > 不過這樣的結果,可能還是沒有辦法有任何實質上的
> 效用,就如
> >             同pingooo所說,確實僅切十份是得不到合理的結果的。
> >             > 目前徒手積分出來的結果,N值至少要49以上,才能
> 求得小數點
> >             下二位的精準度,所以我現行還是用C將整個程式改寫
> 了!
> >             >
> >             > monte carlo的方式,在google上搜尋到的,就如同
> mosky所提的
> >             一樣,都是使用pi為範例,目前還想不到要如何應用在
> 此式上。
> >             > 而由於V_i~U[0,1],所以以此方式來求得之期望值,
> 應該還算接
> >             近結果才是(同時也抱歉的是,這一點也是先前pingooo
> 指正未明確
> >             定義之處)。
> >             > 至於pingooo所提及之挑戰,正是我所期昐的啊!! 目
> 前僅能接受
> >             分割值之輸入(超爛!= =)
> >             >
> >             > 但,mosky的解法,指引了我一盞明燈,或許不是一
> 個不可行的
> >             方式,但效能依然是個bottleneck啊!
> >             >
> >             > --
> >             > 您已訂閱「Google 網上論壇」的「python.tw」群組,
> 因此我們
> >             特別傳送這封郵件通知您。
> >            
> >             > 如要取消訂閱這個群組並停止接收來自這個群組的郵
> 件,請傳送
> >             電子郵件到 pythontw+u...@googlegroups.com
> >             > 如要在此群組張貼留言,請傳送電子郵件至
> >             pyth...@googlegroups.com
> >            
> >            
> >             > 請前往以下網址造訪這個群組:
> >             http://groups.google.com/group/pythontw?hl=zh-TW
> >             > 如需更多選項,請前往:
> >             https://groups.google.com/groups/opt_out
> >             >
> >             >
> >             > 相較於mosky的方式,還真有如野地的土坯之於精緻
> 小洋房啊!再
> >             度見證了python
> >             > 的優雅!
> >             > 對於程式整體的彈性上也大為增加,感謝囉!
> >             >
> >             > 同時我也使用底下的程式驗證了一下,也快了一成左
> 右:
> >             > from time import time
> >             > from time import sleep
> >             > i=range(10)
> >             >
> >             > start = time()
> >             > for i[0] in xrange(s+1):
> >             >     for i[1] in xrange(s+1):
> >             >         for i[2] in xrange(s+1):
> >             >              for i[3] in xrange(s+1):
> >             >                  for i[4] in xrange(s+1):
> >             >                      for i[5] in xrange(s+1):
> >             >                          for i[6] in xrange
> (s+1):
> 如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到
> pythontw+u...@googlegroups.com
> 如要在此群組張貼留言,請傳送電子郵件至 pyth...@googlegroups.com
> 請前往以下網址造訪這個群組:
> http://groups.google.com/group/pythontw?hl=zh-TW
> 如需更多選項,請前往:https://groups.google.com/groups/opt_out
>  
>  
>
>

Reply all
Reply to author
Forward
0 new messages