2016-05-03 13 views
7

में एक सॉर्टिंग पूर्ववत करें यह प्रश्न मूल रूप से that question का विस्तार है।"Desort" एक मैट्रिक्स। Matlab

मैं Matlab में एक मैट्रिक्स A है और एक आयाम के साथ कि मैट्रिक्स क्रमबद्ध करना चाहते हैं:

A = rand(3,3,5); [B idx] = sort(A,3);

अब idx युक्त सूचकांक "हल कर" एक मैट्रिक्स है। मैं केवल B और idx का उपयोग करके मैट्रिक्स A वापस कैसे प्राप्त कर सकता हूं?

The answer मूल प्रश्न के दुर्भाग्यवश, मैट्रिस के लिए काम नहीं करता है।

+0

क्या आपने 'w (ix,:) = v' का प्रयास किया है, जहां' '' अनदेखा "आयामों का प्रतिनिधित्व करता है? – Crowley

+0

क्या आपके मामले में मेरा मतलब कुछ है: w (:,:, idx) = B? यह "सब्सक्रिप्टेड असाइनमेंट आयाम मेल नहीं खाता" के कारण काम नहीं करता है। – Ethunxxx

+0

'डब्ल्यू (आईडीएक्स) = बी' काम करता है लेकिन यह गलत है – shamalaia

उत्तर

4

आपको मूल सूचकांक वापस पाने के लिए सूचकांक idx क्रमबद्ध करने की आवश्यकता है। शेष कार्य में उन सभी मंद-3 सूचकांक के अनुरूप स्वरूपित पंक्ति और कॉलम इंडेक्स प्राप्त करना शामिल होगा। कार्यान्वयन कुछ इस तरह दिखेगा -

[~,dim3idx] = sort(idx,3); 

[m,n,r] = size(B); 
[rowidx,colidx,~] = ndgrid(1:m,1:n,1:r); 

Aout = B(sub2ind(size(B),rowidx,colidx,dim3idx)) 

कृपया ध्यान दें कि प्रदर्शन के लिए, एक वैकल्पिक आकार मानकों से सीधे bsxfun साथ sub2ind द्वारा उत्पन्न रैखिक सूचकांक प्राप्त कर सकते हैं और इस प्रकार भी ndgrid से बचने, इसलिए जैसे -

Aout = B(bsxfun(@plus,bsxfun(@plus,(1:m)',m*(0:n-1)),m*n*(dim3idx-1)))