2
我有一個函數將一個向量作爲輸入,使用另一個函數從輸入創建一個導數向量,然後將兩個向量與產生它的輸出向量。我現在有將其與工作循環如下:使用矩陣運算而不是FOR循環將單元格數組與索引值進行布爾比較
原始陣列,nameVec
,用作輸入到以下功能:
% INPUT: nameVec = '' 'a' 'b' 'aa' 'ab' 'ba' 'aba' 'abb'
首先,將稱爲computeParentName
函數從移除的最後一個字符的nameVec
和每個陣列元件產生此單元陣列:
% OUTPUT: parentNameVec = '' '' '' 'a' 'a' 'b' 'ab' 'ab
接下來,函數computeParentIndex
發現的其中parentNameVec
每個元素出現在的索引:
function [parentIndexVec] = computeParentIndex(nameVec)
parentNameVec = computeParentName(nameVec);
[~,parentIndexVec] = ismember(parentNameVec, nameVec);
end
% OUTPUT: parentIndexVec = 1 1 1 2 2 3 5 5
現在我試圖開發基本上起反向的功能,因爲它需要nameVec
並輸出的單元陣列,它包含每個索引處,所有索引的在parentNameVec
陣列,其中的值是該輸出數組('daughterIndexVec`)當前索引
function [daughterIndexVec] = computeDaughterIndex(nameVec)
parentIndexVec = computeParentIndex(nameVec);
for i=1:length(parentIndexVec)
daughterIndexVec{i} = find(parentIndexVec==i);
end
end
% OUTPUT: daughterIndexVec = {[1,2,3] [4,5] [6] [] [7,8] [] [] []}
的有沒有更簡單(更有效)的方式來做到這一點不使用for
循環?
任何援助非常感謝!
再次感謝!我在這裏學習的非常有用的功能。那麼'accumarray'會比for循環更快嗎(即不像'arrayfun'和'cellfun')? – teepee
@teepee是的。 'accumarray'非常快。你可以使用'timeit'函數自己測試速度 – Suever
對我來說看起來不錯,但是當我運行它時出現一個奇怪的錯誤: '使用accumarray時出錯 當SUBS是列向量時,第三個輸入SZ必須是的形式[N 1] .'我不確定這裏有什麼詭異的... – teepee