我是MATLAB新手,我很努力去理解數組和明智操作之間的細微差別。我正在處理一個大型數據集,我發現最簡單的方法並不總是最快的。我有一個字符串的一個非常大的單元陣列,像這樣簡單的例子:Matlab中的單元陣列的子串
% A vertical array of same-length strings
CellArrayOfStrings = {'aaa123'; 'bbb123'; 'ccc123'; 'ddd123'};
我想提取的子字符串數組,例如:
'a1'
'b1'
'c1'
'd1'
我很高興與不足像這樣的逐元素參考:
% Simple element-wise substring operation
MySubString = CellArrayOfStrings{2}(3:4); % Expected result is 'b1'
但我不能工作了符號引用他們都在一氣呵成,就像這樣:
% Desired result is 'a1','b1','c1','d1'
MyArrayOfSubStrings = CellArrayOfStrings{:}(3:4); % Incorrect notation!
我知道,Matlab是能夠進行非常快的陣列方式的運算,如strcat的,所以我希望的是,在類似的速度工作的技術:
% An array-wise operation which works quickly
tic
speedTest = strcat(CellArrayOfStrings,'hello');
toc % About 2 seconds on my machine with >500K array elements
所有的for循環和使用幕後迭代的函數,我試着用我的數據集運行得太慢。是否有一些數組式的符號可以做到這一點?有人能夠糾正我對元素明智和陣列明智的操作的理解嗎?!非常感謝!
感謝您的全面回覆,這既回答了我的問題,也幫助了我的理解。最後我選擇了選項3,這對我的數據集和函數來說似乎是最好的選擇:我發現在我的函數(選項1)中使用For循環比用cellfun調用函數要慢4倍(選項2)。我選擇了選項3,因爲我不想向其他會使用這個:)的人解釋cellfun。還要感謝Dan和Moshen提供了類似的答案。 – fodfish
很酷。因此,從(1)直接訪問由CellArray = textscan(fid,format)產生的二維單元格數組中的行,列,子字符串,其中col是文本列將是CellArray {col} {row}(3:4)。 –