看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++, GCC, Windows 7 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) Eigen 問題(Question): 希望可以把code簡化 程式太過冗長... 希望有更簡明扼要的寫法 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/PaWuGuTF 新修改的:http://codepad.org/s0ccUhkZ 補充說明(Supplement): function 功能敘述: 拿來做兩個矩陣(or 可兩個都為向量,或是一個為向量)的運算 (同matlab的bsxfun) 要先判斷兩個矩陣的dim為何,進行相對應的運算 假設operator 都用"plus"來舉例 例子一: matrix A: 3 x 5 matrix B: 3 x 1 這樣就是有一個dimension相等 把B的元素加到A的每一行 => 得到矩陣C ( 3 x 5 ) 例子二: matrix A: 3 x 1 matrix B: 1 x 5 類似把A橫向複製五次 加上 B縱向複製三次 這樣會得到矩陣C (3 x 5) 如果operator 用 "times" 相加就改成相乘 現在因為有兩層,code會非常長 不知道有沒有方法縮成一層 (除了把if條件合併外的方法) 用比較簡單的方法呈現整個程式 謝謝大大協助! 另外,想問我現在C++都用Eigen library 而我只看過C++ primer中 資料型態的部分 對於template, STL, container完全不熟 會影響我寫程式的效率嗎? 主要使用是做科學運算為主 PS: 其他程式語言 只學過matlab, R -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.238.90.220
asilzheng:你要的應該是 && 而不是 & 02/16 00:38
謝謝告知
EdisonX:operator 獨立看起來會較簡潔 . container 在你的問題幫助 02/16 00:42
operator 我想寫在一起 沒想拆開...
EdisonX:不會太大 ( 扣除掉謎樣的 valarray 具加速空間 ) , 其它的 02/16 00:44
EdisonX:應是評斷你願不願意花開發時間換取執行效率,不然可跑就好. 02/16 00:45
EdisonX:看到 keyword , eigen library 對 c++ 特性熟才容易上手. 02/16 00:49
謝謝大大告知 我會繼續補強我的C++的
steve1012:可以畫檢一下找出比較簡單的邏輯 02/16 02:04
steve1012:不然可以用變數把狀況先記起來 用switch? 02/16 02:08
switch 考慮過 可是真的不如if-else簡單
jenny2921:我覺得程式碼雖然長 但是是很單純的if-clause 所以不用 02/16 03:13
jenny2921:擔心readibility 我覺得保持現狀即可 02/16 03:13
好,不過我還要擴充兩個operate...怕越來越亂
jenny2921:倒是你的程式確定正確性ok嗎? 如果A_r==B_r && A_c==B_c 02/16 03:14
其實我還沒寫完,還少這個case跟else還要報錯XDD
jenny2921:的情況好像沒寫到? 02/16 03:15
jenny2921:然後第44行那邊應該是for ... i<A_c ? 02/16 03:15
謝謝更正,真的很細心幫我看
jenny2921:還有建議 第16行最好寫B_r,B_c 第30行寫B_r,B_c 和原本 02/16 03:17
jenny2921:的code是一樣的function 可是我覺得意義上比較好XD 02/16 03:17
好,謝謝建議
jenny2921:另外就是 如果不符合所有以上case的話 的error output也 02/16 03:19
jenny2921:要處理一下(3x5加上2x4之類的) 可能在99行加個code 印出 02/16 03:20
jenny2921:錯誤訊息 exit(1)之類的@@ 02/16 03:20
已補上:http://codepad.org/s0ccUhkZ
jenny2921:另外14行的A_r<B_r, 21的A_r>B_r, 28的A_c<B_c, 35的A_c 02/16 03:29
jenny2921:>B_c, 42和48的兩個!=, 這些我覺得都可以拿掉, 因為對於 02/16 03:30
jenny2921:運算結果應該沒差@@ 然後加了這些多餘的判斷式卻有礙閱 02/16 03:31
jenny2921:讀...如果只剩 A_r==1 && A_c==B_c 就可以解釋成 一個列 02/16 03:32
jenny2921:向量和一個矩陣相加...這樣應該會比較單純好閱讀~ 02/16 03:32
謝謝,已經修改 程式已經全數修正完畢,完整版本就不方便放上了, 有興趣可以在私信我,或是自行修改。 ※ 編輯: celestialgod 來自: 36.238.90.220 (02/16 05:00)
EdisonX:嗯,我當時的意思是,operator=="times" 以下的敘述可獨立成 02/17 03:50
EdisonX:functions,這樣變一個函式呼叫其它四個函式,不過弄完也罷. 02/17 03:50