[討論] 找到cell中特定長度字串的方法?

看板MATLAB作者 (mmcci)時間10年前 (2015/08/25 17:29), 10年前編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/1
大家好,我剛學用matlab沒多久,遇到一個有關cell的問題想請教大家 標題可能不太清楚,我直接舉例 我現在有一個cell,裏面都是文字 DD={'thisnot' 'this' 'nothis' 'thiswrong' 'this'}; 我希望找出只有 this 這個字的元素的位置 我設想的方法是找出字串長度為4的元素 嘗試過length(DD) length(cell2mat(DD)) 和cellfun等方法 想當然都不行 現在所使用的方法靠硬幹,用迴圈逐個找 a=length(cell2mat(DD(i))); a==4 但我覺得這樣程式很長又不方便 因此想請教各位大神,有沒有更好的方法? 另外想問 如果cell所有元素的字串長度都一樣,像下面 BB={'this_11' 'this_no' 'no_this' 'this_12' 'this_no'} 這種情況下我有甚麼方法可以找到 this_數字 這個格式的元素位置了? 拜托各位指點迷津... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.47.41 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1440494971.A.C81.html

08/25 17:35, , 1F
cellfun(@(x) length(x)==4, DD)
08/25 17:35, 1F

08/25 17:36, , 2F
or cellfun(@length, DD)==4
08/25 17:36, 2F
可以了耶! 原來要這樣用cellfun啊! 實在太感謝了 (跪 那如果是文中BB那種情況的話有辦法嗎?? 再感謝一次!! ※ 編輯: mmcci (140.115.47.41), 08/25/2015 17:42:56

08/25 17:38, , 3F
第二個應該是regexp(BB, 'this_\d*')
08/25 17:38, 3F
C大你真的是我的大恩人 但我發現用'\d*'這樣的話會連 this_no 這種後面接字母的也找出來 所以我只用'\d',這樣就能成功找出 this_數字 的元素了 實在太感謝你啦 (再跪 ※ 編輯: mmcci (140.115.47.41), 08/25/2015 17:50:04

08/25 17:58, , 4F
把*改成+就好,剛剛有想到
08/25 17:58, 4F

08/26 11:12, , 5F
我好像看過書 cellfun有時不會比for loop快
08/26 11:12, 5F

08/29 01:58, , 6F
cellfun只是寫起來漂亮XD
08/29 01:58, 6F

08/29 05:54, , 7F
不用再設一個暫存迴圈變數,也不用考慮變數的size
08/29 05:54, 7F

08/29 10:31, , 8F
對,而且自動preallocate memory
08/29 10:31, 8F
文章代碼(AID): #1Lt3Lxo1 (MATLAB)
文章代碼(AID): #1Lt3Lxo1 (MATLAB)