1
- 可以說我有一個數組x的數據值。
- 我執行了一種聚類算法,該算法已生成帶有標籤名稱的標籤貼圖 - labelMap。數據中的每個點現在都有一個與之關聯的唯一羣集標籤。
- 然後我在每個子集上執行函數foo(subset,secondArg)。函數foo返回一個新數組,其結果與給定參數(其map()函數也接收第二個參數)的大小相同。
以下是當前實現:使這個matlab代碼運行沒有for循環
x = rand(1,1000);
numClusters = 3; % specified in advance by the user, for example using a clustering algorithm such as K-Means, this is a given.
fooSecondArg = [1,2,3]; % second argument for foo().
labelMap = kmeans(x,numClusters);
res = zeros(size(x));
%% make me run without a for loop :)
for ind = 1:numClusters
res(labelMap == ind) = foo(x(labelMap == ind), fooSecondArg(ind));
end
我的問題如下:
,因爲在X FOO(指數之間沒有重疊)作用於,是有辦法不使用for或parfor循環來執行foo而不使用x? (我不想使用parfor循環,因爲它需要很長時間才能啓動額外的matlab進程,並且我以後不能將其部署爲獨立應用程序)。
非常感謝!
編輯: 我被要求提供一個foo()的例子,因爲我被告知解決方案可能取決於它。一個好的可行的例子,你可以在你的答案中使用:
function out = foo(x,secondArg)
out = x.^2/secondArg;
我不認爲有一種自動方式(您可以嘗試'accumarray'與一個匿名函數返回一個單元格數組,但必須更慢)。這完全取決於'foo'在內部的作用 –
擬合foo(x,secondArg)的一個例子可能是:return out = x。^ 2/secondArg – user2324712
這個'secondArg'如何依賴於集羣標籤?你有從集羣標籤到'secondArg'的某種映射嗎? –