Re: [問題] 關於Select的用法

看板Mathematica作者 (-858993460)時間12年前 (2012/02/28 17:18), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《qoodeva (發呆的花枝)》之銘言: : 不好意思小弟又來請教版上高手了= =" : 1. : 若有一串數列為 : {3.4,3+6i,3-6i,-3.4} : 我只想要複數的虛部以及其他實數 : {3.4,6i,-6i,-3.4} : 2.又有一串數列為正負根 : {3.4,3+6i,3-6i,-3.4} : 只想選取正根值 : {3.4,6i} : 如果使用Im或Re選取,只能選單一選擇複數的實部跟虛部, : 看官網的Flash動畫有介紹到Select這個語法, : 那改用Select不知後面的判別式要如何寫 : 推 LPH66:2.有點看不太懂...對虛數你想做什麼? 02/28 16:19 : → LPH66:1.感覺有點像是 Apply (/@) 運用的地方 02/28 16:19 : → LPH66: Map (記錯了, 那個運算子是 Map 才對) 02/28 16:20 : 2.的地方是因為是一微分方程式的根值,為兩個正負根(±3.4,3±6i) : 但我只需要正值就好,所以3±6i這個複數我只需要用到虛部 6i, : 前面那個3可以併到常係數裡 這樣的話我們可以分兩步來做 (正好就是你的 1. 和 2.) 首先是 1. 這裡我提到它是 Map 運用的地方 Map 的功能就是把一個函數作用到陣列中的每個元素上 例如 f /@ {a,b,c} 會得到 {f[a],f[b],f[c]} 這部份可以參考我的 #1EiPGgzs 這篇文章 觀察到這裡其實有著 實數→不動 這樣的對應 複數→取出虛部 那麼就可以寫成這樣: In[1] := v = {3.4, 3+6I, 3-6I, -3.4}; In[2] := If[Im[#] == 0, #, Im[#] * I]& /@ v Out[2] = {3.4, 6I, -6I, -3.4} In[2] 的前半段到 & 為止是純函式 #1EiPGgzs 也有講解 這個純函式做的事是 若它是實數→就是它自己 否則(它是虛數)→取出虛部再乘上 I 也就是實接照著上面觀察到的對應在寫 再來 2. 的部份才是 Select 上場的時候了 你要在前面的結果中選出值是正的部份 Select 的寫法在第二個參數是個判斷函式 它會挑出代進判斷函式會得到 True 的值 那麼這裡再運用一個純函式就可以寫成: In[3] := Select[%, If[Im[#] == 0, # > 0, Im[#] > 0]&] Out[3] = {3.4, 6I} % 的意思應該不用多說了 後面的純函式做的是這樣的判斷 實數→看它是否為正 虛數→看虛部是否為正 --- 不過如果還不習慣寫純函式的話寫普通的函式也是可以的: In[4] := Takeout[x_] := If[Im[x] == 0, x, Im[x] * I] In[5] := CheckPositive[x_] := If[Im[x] == 0, x > 0, Im[x] > 0] In[6] := Takeout /@ v Out[6] = {3.4, 6I, -6I, -3.4} In[7] := Select[%, CheckPositive] Out[7] = {3.4, 6I} In[4]~In[7] 這幾行和上面的 In[2]~In[3] 做的是一樣的事情 這樣你也可以更好理解 Select 在做什麼: In[7] 這句就是把 % (Out[6])當中 CheckPositive[值] 會回傳 True 的值挑出來 -- 1985/01/12 三嶋鳴海 1989/02/22 優希堂悟 1990/02/22 冬川こころ 1993/07/05 小町 つぐみ 歡迎來到 1994/05/21 高江ミュウ 1997/03/24 守野いづみ 1997/03/24 伊野瀬 チサト 1998/06/18 守野くるみ 打越鋼太郎的 1999/10/19 楠田ゆに 2000/02/15 樋口遙 2002/12/17 八神ココ 2011/01/11 HAL18於朱倉岳墜機 ∞與∫的世界 2011/04/02 茜崎空 啟動 2012/05/21 第貮日蝕計畫預定 2017/05/01~07 LeMU崩壞 2019/04/01~07 某大學合宿 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.62

02/28 18:17, , 1F
謝謝LP大,關於Map用法瞭解還不夠,我再多多練習,謝謝你
02/28 18:17, 1F
文章代碼(AID): #1FJ9lDzI (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1FJ9lDzI (Mathematica)