[討論] 矩陣重組reshape(更有效率方法?)

看板MATLAB作者 (MimiBao)時間8年前 (2016/08/29 12:23), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串1/1
我現在處理很大的數據 每筆數據都是透過binary檔案讀出來的 一開始讀出來長這樣: PPPP.....PP QQQQQ....QQ DD....DD P、Q、D的數目相同 (P、Q、D代表參數,我其實有9種不同參數) reshap後可以變成這樣 12345678..... A PPPPPPQQQQQQDDDDDD B PPPPPPQQQQQQDDDDDD C PPPPPPQQQQQQDDDDDD D PPPPPPQQQQQQDDDDDD 但我希望長這樣: PQD PQD PQD PQD PQD ...etc. 我現在用的方法很土法煉鋼,不是迴圈(迴圈會變超級慢,因為總共是45萬*9參數) 我是使用編號的方法,在第二步加了橫向的編號 透過幾次轉置矩陣+reshap後 利用sortrow(編號)達到我要的效果,雖然速度上也夠快 但總覺得程式碼很醜 不知道有沒有更簡潔的作法? 謝謝 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 8.26.231.63 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1472444588.A.BFA.html

08/29 12:34, , 1F
reshape(permute(reshape(X,4,112500,9),[2 1 3]),[],9);
08/29 12:34, 1F

08/29 12:47, , 2F
請問為什麼是112500? 另外[2 1 3]這裡我不太了解
08/29 12:47, 2F

08/29 12:47, , 3F
P、Q、D分別代表三種參數 但我事實上有九種
08/29 12:47, 3F

08/29 12:48, , 4F
其實我和permute真的不太熟 剛剛也是看好久但越跑越怪QQ
08/29 12:48, 4F

08/29 13:02, , 5F
我看懂了,謝謝你QQ 這樣一行抵我8行啊!感激不盡
08/29 13:02, 5F

08/29 13:08, , 6F
如果把轉置看成 A_ij -> A_ji ,那permute就是轉置的推廣
08/29 13:08, 6F

08/29 13:16, , 7F
謝謝,我剛剛寫出來變成index notation後,果然就清楚多了
08/29 13:16, 7F

08/29 13:17, , 8F
倒是真的沒想到reshape有更多維度可以運用
08/29 13:17, 8F
文章代碼(AID): #1NmxYilw (MATLAB)
文章代碼(AID): #1NmxYilw (MATLAB)