2012-08-15 96 views
1

我有一個以下的matlab代碼,我不知道如何切片稱爲「數據」的矩陣。如何在matlab parfor循環中切分這個矩陣?

簡單地說,是什麼代碼所做的是:

在每次迭代中,創建一個重新排序稱爲「newOrder」和 調用一個函數「火車」與重新排序的矢量「y」和重新排序矩陣「數據」。 這裏,「重新排序」使用所有元素而不是它們的子集。循環運行速度非常關鍵,所以我很關心這個警告。

w = []; data = sparse(double(X(:,selTrain))); 

parfor ci = 1:length(classes) 
    y = 2*(imageClass(selTrain)==ci)'-1; 
    newOrder = [find(y==1); find(y==-1)]; 
    this_svm = train(y(newOrder), data(:, newOrder), ' -s 3 -B 1 -c 10 -q', 'col');  
    w(:,ci) = this_svm.w'; 
end 

我沒有收到錯誤,但發出警告:變量數據在parfor循環中被編入索引但未被分片。這可能會導致不必要的通信開銷。

我需要爲組合多次重新排序做到這一點。 所以我花了很多時間絕望地嘗試一堆東西.. 任何幫助或建議將是偉大的。

謝謝。

+0

您是否想要並行計算'data'矩陣的所有順序以同時運行多個SVM'train'?這並不完全清楚。你能給我更多的細節嗎? – Yamaneko 2012-08-15 01:29:28

+0

並非所有的數據訂單。對於每個類,我想重新排序數據矩陣並調用火車功能。 – 2012-08-15 04:24:08

+0

你得到的錯誤究竟是什麼?你可以添加到你的問題? – jmetz 2012-08-15 20:46:08

回答

0

我假設你已經解決了這個問題;但是,爲了完整起見,問題在於用於索引數據的neworder與允許數據分片的方式與parfor循環索引ci無關。造成這種故障的最直接原因是neworder是一個向量而不是標量。馬上阻止matlab切分數據。即使情況並非如此,當matlab無法將循環索引(ci)與變量索引(neworder)關聯時,它也無法對數據進行分片。