मैं थोड़ी देर के लिए इस प्रश्न के बारे में सोच रहा हूं लेकिन संदर्भ नहीं मिल रहा है: मैटलैब एक स्पैर मैट्रिक्स को इतनी तेजी से कैसे स्थानांतरित करता है, यह देखते हुए कि यह सीएससी (संपीड़ित स्पैस कॉलम) प्रारूप में संग्रहीत है?मैटलैब एक स्पैर मैट्रिक्स कैसे ट्रांसफर करता है?
इसके अलावा its documentation विरल मैट्रिक्स स्थानांतरण की दक्षता की पुष्टि करता है:
इस (पंक्ति द्वारा तक पहुँचने पंक्ति) करने के लिए, आप मैट्रिक्स स्थानांतरित कर सकते हैं, स्तंभों पर कार्रवाई करने, और उसके बाद परिणाम retranspose ... समय मैट्रिक्स को स्थानांतरित करने के लिए आवश्यक नगण्य है।
फ़ॉलो-अप (के रूप में @Mikhail ने सुझाव दिया संशोधित):
मैं @Roger और @Milhail साथ सहमत हैं कि एक ध्वज की स्थापना के मामले में इस तरह के BLAS या विरल BLAS संचालन के रूप में कई कार्यों के लिए पर्याप्त है उनके इंटरफेस। लेकिन मुझे ऐसा लगता है कि मैटलैब "वास्तविक" पारदर्शिता करता है। उदाहरण के लिए, मैं के साथ आकार मीटर * एन = 7984 * 12411 एक विरल मैट्रिक्स एक्स है, और मुझे प्रत्येक स्तंभ और प्रत्येक पंक्ति पैमाने पर करने के हैं:
% scaling each column
t = 0;
for i = 1 : 1000
A = X; t0 = tic;
A = bsxfun(@times, A, rand(1,n));
t = t + toc(t0);
end
टी = 0.०,२३,६३६ सेकंड
% scaling each row
t = 0;
for i = 1 : 1000
A = X; t0 = tic;
A = bsxfun(@times, A, rand(m,1));
t = t + toc(t0);
end
टी = 138.3586 सेकंड
% scaling each row by transposing X and transforming back
t = 0;
for i = 1 : 1000
A = X; t0 = tic;
A = A'; A = bsxfun(@times, A, rand(1,m)); A = A';
t = t + toc(t0);
end
टी = 19.5433 सेकंड
इस परिणाम का मतलब है कि स्तंभ से स्तंभ तक पहुँचने की तुलना में तेजी है पंक्ति से पंक्ति का उपयोग करना। यह समझ में आता है क्योंकि स्पैर मैट्रिस कॉलम द्वारा कॉलम संग्रहीत किया जाता है। तो एक्स 'के कॉलम स्केलिंग की तेज़ गति के लिए एकमात्र कारण यह होना चाहिए कि एक्स को वास्तव में ध्वज स्थापित करने के बजाय एक्स को स्थानांतरित किया जाना चाहिए।
इसके अलावा, यदि प्रत्येक स्पैर मैट्रिक्स सीएससी प्रारूप में संग्रहीत है, तो बस ध्वज सेट करने से एक्स 'सीएससी प्रारूप में नहीं हो सकता है।
कोई टिप्पणी? अग्रिम में धन्यवाद।
यह शायद एक ध्वज सेट करता है जो इसके सरणी अभिगम व्यवहार को नियंत्रित करता है - पहुंच पर पंक्ति/कॉलम इंडेक्स को स्वैप करना और डेटा लोन छोड़ना बहुत तेज़ है। –
@RogerRowland कृपया ऊपर दिए गए अनुवर्ती अनुवर्ती देखें। धन्यवाद। –
मैं कई परीक्षण करने का सुझाव दूंगा। 20 मिलीसेकंड एक विश्वसनीय समय माप नहीं है। – Mikhail