Re: [討論] 欲計算Hessian,應如何建立Cell Array?
※ 引述《YoursEver (銀英傳出webgame!?)》之銘言:
: 如題,
: 要計算4D Hessian,
: 請問應如何將所有的偏微分項排入cell array?
: 以2D舉例,
: (1) H = [ partial_xx, partial_xy; partial_yx, partial_yy ];
: (2) 假設對一張 M-by-N 的影像做 Hessian,
: 這時候會得到 partial_xx, partial_xy; partial_yx, partial_yy 等,
: 共 4 個大小為 M-by_N 的矩陣.
: (3) 我希望建立一個 M-by-N 的 cell array,
: 每一個cell內含一個 2*2 的矩陣:
: [ partial_xx(i,j), partial_xy(i,j);
: partial_yx(i,j), partial_yy(i,j)]
: (i,j)對應到原本影像內的第(i,j)個pixel;
: ==
: 請問該怎麼寫才省時省力?
: 目前必須要排進cell array才能call cellfun處理後續.
: 雖然可以靠迴圈硬排,
: 因為實際的4D data量太大,迴圈會額外耗費時間.
: 謝謝.
我不知道你4D是什麼意思,以你2D為例:
M = 400;
N = 300;
partial_xx = rand(M, N);
partial_xy = rand(M, N);
partial_yx = rand(M, N);
partial_yy = rand(M, N);
tic
H = cat(3, partial_xx, partial_yx, partial_xy, partial_yy);
H = cellfun(@(x) reshape(squeeze(x), 2, 2), num2cell(H, 3), 'uni', false);
toc
% Elapsed time is 2.287873 seconds.
% note: 注意cat的順序,因為MATLAB是column-major,排的時候要排對
tic
H2 = arrayfun(@(x11, x12, x21, x22) [x11, x12; x21, x22], partial_xx, ...
partial_xy, partial_yx, partial_yy, 'uni', false);
toc
% Elapsed time is 1.355389 seconds.
isequal(H, H2) % true
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.73.190
※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1445489551.A.8B0.html
※ 編輯: celestialgod (140.109.73.190), 10/22/2015 13:45:08
推
10/22 14:07, , 1F
10/22 14:07, 1F
→
10/22 14:14, , 2F
10/22 14:14, 2F
我也要做一個很複雜的東西 也是四個維度要看eigen vector....更可怕~"~
偷偷GOOGLE你的IP 是我斜對面的所 - 資訊所的吧? 有機會可以認識一下XDD
你的有點像是聽起來像是fMRI資料... 腦袋+時間 四維了
→
10/22 16:23, , 3F
10/22 16:23, 3F
推
10/22 16:28, , 4F
10/22 16:28, 4F
→
10/22 16:28, , 5F
10/22 16:28, 5F
→
10/22 16:28, , 6F
10/22 16:28, 6F
推
10/22 16:50, , 7F
10/22 16:50, 7F
恩阿,唉,最近越來越不滿意MATLAB,可是他現在是主要工具,我好想換R....XDD
最近遇到讀進來的資料是chracter跟numeric參雜的資料
我也不可能手動去做identification的動作,只能用慢慢的readtable做
然後table的varfun根本就是迴圈,很慢慢慢慢的迴圈~~~
推
10/22 17:25, , 8F
10/22 17:25, 8F
→
10/22 17:25, , 9F
10/22 17:25, 9F
恩,主要是IO吧QQ,進來之後都可以用struct來做
我IO後來改成自己硬幹之後 有好一點 不過還是沒辦法47MB在很快時間讀完
不過在處理字串上MATLAB還是慢的誇張
regexp(cell_of_strings, 'some format', 'tokens') 要有點久= =
推
10/22 23:44, , 10F
10/22 23:44, 10F
因為老師要從windows到linux, mac都要能用,我連c++都不敢寫......
所以更不用說sh了XDD 乖乖用MATLAB做IO
其實能用其他工具 我就用R幹了= =... 何必還去用SH怎麼處理資料
推
10/23 00:11, , 11F
10/23 00:11, 11F
我們老師就是要確定在三個平台的matlab都能跑 這樣說比較合理XD
中研院有錢阿 都有買= = 老師自己用MAC 之後跑模擬用linux
我自己測試用windows XDD 我是可以去用linux 可是MAC也不能去做sh= =
→
10/23 00:13, , 12F
10/23 00:13, 12F
就這樣吧 我正在說服我們老師改用R XDD
他用R 我用Rcpp 系統是什麼應該都沒關係了(攤手
MEX編譯有時候跨個平台都會出事(嘆氣 還要MATLAB版本要比較舊....一堆麻煩事
推
10/23 00:17, , 13F
10/23 00:17, 13F
嗚嗚嗚嗚 你不要把我推向一個大坑
推
10/23 00:23, , 14F
10/23 00:23, 14F
我自己在MATLAB 2015b編了一個MEX 丟去2014b就不能用了 我只能在安裝一個2014b編譯
→
10/23 00:25, , 15F
10/23 00:25, 15F
我的東西大概長這樣:
select, varName1, varName2, ..., varName56 from XXX where YYYZZZ....
go
,character, number, number, number, ...
....(重複上一行格式大概有287列)
接著,再重複上面的那四行大概100~300次(depends) 是一個檔案
共有400個這樣的檔案要處理,我不確定要怎樣用SH做
推
10/23 00:39, , 16F
10/23 00:39, 16F
→
10/23 00:39, , 17F
10/23 00:39, 17F
推
10/23 00:44, , 18F
10/23 00:44, 18F
都要抓,所以很麻煩,如果只抓後面用csvread直接解決
對了,有時候,會不一樣多,所以若直接用,做切割
切出來會不一樣長還要排除這種情況
我現在做法是直接全部讀進來
有包含select, go都刪掉
然後用strsplit去切每一列,去掉長度0的cell跟過長的
最後把數字部分變成矩陣,剩下character用成cell
然後在製作對應表把character轉成數字 並到矩陣去
最後把對應表跟character部分都存下來
※ 編輯: celestialgod (180.218.154.163), 10/23/2015 00:55:38
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章