2013-01-25 80 views
11

मैं कुछ मैटलैब होमवर्क पर काम कर रहा हूं और मुझे मैट्रिक्स को संबोधित करने के तरीके को अवधारणा देने में समस्याएं थीं। Matlab में मैट्रिक्स d(row,col) प्रारूप में पता है।एरे को क्षैतिज या ऊर्ध्वाधर संरचनाओं के बारे में सोचा जाना चाहिए

मैं थोड़ी देर के लिए प्रोग्रामिंग कर रहा हूं और हमेशा एक आयामी संरचना के रूप में एक क्षैतिज संरचना के रूप में सोचने के लिए नीचे से विस्तारित एक दूसरे आयाम के साथ विचार किया है।

इनमें से कौन सा दृश्य

उत्तर

15

अच्छा प्रश्न +1 के कंप्यूटर के बिंदु से एक सरणी डेटा संरचना के बारे में सोच की एक "अधिक सही" तरीका है।

निश्चित रूप से एक मैटलैब प्रोग्रामिंग परिप्रेक्ष्य से, कॉलम वैक्टर के अनुक्रम के रूप में मैट्रिक्स के बारे में सोचना सबसे अच्छा है। क्यूं कर? क्योंकि मैटलैब उन्हें आपके कंप्यूटर मेमोरी में आवंटित करता है। यही है, मैट्रिक्स के किसी भी दिए गए कॉलम में दो अनुक्रमिक तत्व स्मृति में एक दूसरे के बगल में आवंटित किए जाएंगे। इसे कभी-कभी "कॉलम-प्रमुख ऑर्डर" के रूप में जाना जाता है, और फोर्ट्रान, आर और जूलिया जैसी भाषाओं में इसका उपयोग किया जाता है। इसके विपरीत, आश्चर्यजनक रूप से, "पंक्ति-प्रमुख आदेश" कहा जाता है, और इसका उपयोग सी और पायथन में किया जाता है।

इसका निहितार्थ यह है कि पंक्तियों की तुलना में मैट्रिक्स के कॉलम पर प्रदर्शन करने में मैटलैब बहुत तेज होगा। @angainor ने कुछ महीने पहले मेरे एक प्रश्न के लिए great answer प्रदान किया जो इस तथ्य को प्रदर्शित करता है। @ Angainor की अंतर्दृष्टि के आधार पर, यहां चलाने के लिए एक उपयोगी गति परीक्षण है:

M = 1000; %# Number of iterations over each method 
T = 1000; %# Number of rows 
N = 1000; %# Number of columns 

X = randn(T, N); %# Random matrix 

%# Loop over the rows of a matrix and perform a sum operation on each row vector 
tic 
for m = 1:M 
    for t = 1:T 
     sum(X(t, :)); 
    end 
end 
toc 

%# Loop over the columns of a matrix and perform a sum operation on each column vector 
tic 
for m = 1:M 
    for n = 1:N 
     sum(X(:, n)); 
    end 
end 
toc 

मेरी मशीन पर, परीक्षण का परिणाम है:

Elapsed time is 9.371870 seconds. %# Looping over rows 
Elapsed time is 1.943970 seconds. %# Looping over columns 

दूसरे शब्दों में, स्तंभ पर प्रदर्शन किया आपरेशन लगभग हैं पंक्तियों पर किए गए संचालन से 5 गुना तेजी से!

गणितीय परिप्रेक्ष्य से मैं एक अच्छा जवाब देने के लिए खुद पर भरोसा नहीं करता हूं। आप शायद math.stackexchange से कुछ महान अंतर्दृष्टि प्राप्त कर सकते हैं।

+0

गणितीय रूप से, सम्मेलन कॉलम वैक्टर का भी उपयोग करना है। इसका मतलब है कि एक आंतरिक उत्पाद डब्ल्यूटी एक्स के रूप में लिखा जाता है (जहां टी ट्रांसपोज़ होता है, डब्ल्यू कॉलम वेक्टर होता है, और एक्स एक मैट्रिक्स है)। आप इसे दूसरी तरफ कर सकते हैं, लेकिन आपको उस ऑर्डर को रिवर्स करना होगा जहां आपने इसे देखा था, और इस तरह से अधिकांश यौगिक अभिव्यक्तियों के लिए अधिक उपयोगी है। –