मेरे पास एक वेक्टर है जिसमें 2-डी स्पेस में कुछ बिंदु हैं। मैं MATLAB को इन बिंदुओं को प्रत्येक बिंदु से प्रत्येक बिंदु से खींची गई रेखाओं के साथ प्लॉट करना चाहता हूं। असल में, मैं जुड़े सभी शिखर के साथ एक ग्राफ चाहता हूँ। क्या आप साजिश के साथ ऐसा कर सकते हैं और यदि हां, तो कैसे?मैं वेक्टर में सभी बिंदुओं के बीच लाइनों को कैसे प्लॉट करूं?
उत्तर
एक समाधान फ़ंक्शन MESHGRID का उपयोग करके बिंदुओं के प्रत्येक संयोजन के लिए सूचकांक का एक सेट बनाना है। इसके बाद आप समारोह LINE (जो डेटा की यह दिया है प्रति स्तंभ एक लाइन भूखंडों) का उपयोग कर प्रत्येक पंक्ति प्लॉट कर सकते हैं:
N = 10; %# Number of points
x = rand(1,N); %# A set of random x values
y = rand(1,N); %# A set of random y values
[I,J] = meshgrid(1:N); %# Create all the combinations of indices
index = [I(:) J(:)].'; %'# Reshape the indices
line(x(index),y(index),'Color','k'); %# Plot the lines
hold on
plot(x,y,'r*'); %# Plot the points
संपादित करें:
आप देख सकते हैं कि इसके बाद के संस्करण समाधान के लिए एक लाइन साजिश होगा प्रत्येक कनेक्शन, जिसका अर्थ यह है कि यह शून्य लंबाई कनेक्टिंग पॉइंट्स की लाइनों को प्लॉट करेगा और प्रत्येक कनेक्शन के लिए 2 लाइनों को प्लॉट करेगा (यानी बिंदु ए से बिंदु बी और बिंदु बी से बिंदु ए तक)।
N = 10; %# Number of points
x = rand(1,N); %# A set of random x values
y = rand(1,N); %# A set of random y values
[r,c,v] = find(hankel(2:N)); %# Create unique combinations of indices
index = [v c].'; %'# Reshape the indices
line(x(index),y(index),'Color','k'); %# Plot the lines
hold on
plot(x,y,'r*'); %# Plot the points
ऊपर समाधान के दोनों बनाने के नेत्रहीन समान भूखंडों: यहाँ एक और समाधान (कार्यों HANKEL और FIND का प्रयोग करके) कि निरर्थक या अनावश्यक लाइनों साजिश नहीं होगा
एक समय पर ध्यान दें ...
जिज्ञासा से, मैंने सोचा कि मैं अपना HANKEL समाधान और तुलना करूँगा यह Amro's बहुत terse NCHOOSEK समाधान के साथ। N = 10
के लिए, कोई सराहनीय अंतर नहीं था।
एन = 200
>> tic; [r,c,v] = find(hankel(2:N)); index = [v c].'; toc; %' Elapsed time is 0.009747 seconds. >> tic; pairs = nchoosek(1:N,2).'; toc; %' Elapsed time is 0.063982 seconds.
एन = 1000: हालांकि, के रूप में मैं बहुत बड़ा मूल्यों के
N
वृद्धि हुई मैं NCHOOSEK समाधान शुरू देखने के लिए बहुत धीमी गति से होने लगे>> tic; [r,c,v] = find(hankel(2:N)); index = [v c].'; toc; %' Elapsed time is 0.175601 seconds. >> tic; pairs = nchoosek(1:N,2).'; toc; %' Elapsed time is 12.523955 seconds.
मैं आश्चर्यचकित था, जब तक मैंने NCHOOSEK के लिए कोड नहीं देखा (MATLAB कमांड विंडो में type nchoosek
टाइप करके)। preallocated (जैसा कि एमेरो ने टिप्पणी में बताया है) के बजाय लूप के अंदर एक चर नहीं उगाया जा रहा है, लेकिन एल्गोरिदम का उपयोग भी रिकर्सिव है, जिसका अर्थ है कि कई फ़ंक्शन कॉल किए जाते हैं। मैंने NCHOOSEK के लिए सहायता टेक्स्ट के अंत में यह लाइन भी देखी:
यह वाक्यविन्यास केवल उन स्थितियों के लिए व्यावहारिक है जहां एन लगभग 15 से कम है।
gnovice के उदाहरण पर बिल्डिंग, एक सरल सभी जोड़ों को पैदा करने में अधिक सहज तरीका nchoosek समारोह उपयोग कर रहा है:
%# random points
N = 10;
x = rand(1,N);
y = rand(1,N);
%# all possible combinations of the elements of [1:N] taken 2 at a time
pairs = nchoosek(1:N, 2)';
%'# plot points and lines
plot(x(pairs), y(pairs), '-bs', 'MarkerFaceColor','g', 'MarkerSize',10)
+1: बहुत अच्छा! मुझे एहसास का एहसास नहीं हुआ कि इस तरह इस्तेमाल किया जा सकता था। – gnovice
मुझे इस उत्कृष्ट "कॉम्बिनेटोरिक्स के परिचय" ब्लॉग पोस्ट में पढ़ने को याद आया: http://blinkdagger.com/matlab/matlab-a-introduction-to-combinatorics/ – Amro
जिज्ञासा से, मैंने बड़े पैमाने पर हमारे समाधानों का कुछ समय किया 'n'। मैंने इसे अपने जवाब में जोड़ा, और मैं परिणामों से आश्चर्यचकित था। क्या आप एक ही बात देखते हैं? – gnovice
- 1. डेटा बिंदुओं के बीच अंतर कैसे करें?
- 2. सभी बिंदुओं को
- 3. पहले लाइनों को कैसे प्लॉट करें और matplotlib
- 4. मैं सभी मिलान लाइनों को एक बफर में कैसे जोड़ूं?
- 5. लाइनों के बजाय प्लॉट अंक? JFreeChart PolarChart
- 6. मैं स्क्रीन पर अक्षांश/देशांतर निर्देशांक कैसे प्लॉट करूं?
- 7. Emacs में मैं एक साथ कई बिंदुओं को कैसे संपादित करूं?
- 8. एल्गोरिदम: सभी बिंदुओं के बीच सबसे छोटा रास्ता
- 9. परिप्रेक्ष्य प्रक्षेपण - मैं 'कैमरे' के पीछे वाले बिंदुओं को कैसे प्रोजेक्ट करूं?
- 10. दो बिंदुओं के बीच स्थिति?
- 11. matplotlib: वेक्टर प्लॉट उत्पन्न करना
- 12. सीएसएस में लाइनों के बीच अंतर को कैसे बढ़ाया जाए?
- 13. टेक्स्टव्यू में लाइनों के बीच अंतर को कैसे बढ़ाया जाए।
- 14. MySQL के बीच अंतिम बिंदुओं के बिना
- 15. मैं सभी अंतराल को कैसे साफ़ करूं?
- 16. संचयी योग प्लॉट पर नियमित समय बिंदुओं पर एक इंटरपोलेशन की ढलानों को मैं कैसे प्राप्त करूं?
- 17. मैं एफ # में डेटा श्रृंखला कैसे प्लॉट करूं?
- 18. विम में, मैं पिछले 100 लाइनों को छोड़कर फ़ाइल में सभी लाइनों को कैसे हटा सकता हूं?
- 19. वेक्टर से सभी एनए को कैसे हटाएं?
- 20. दो तिथियों के बीच सभी दिनों का एक वेक्टर बनाएं
- 21. मैं वृक्षारोपण में सभी मूल्यों को कैसे मुद्रित करूं?
- 22. दो कॉलम के बीच सभी लाइनों से पाठ को कैसे हटाया जाए?
- 23. मैं ASP.NET पृष्ठ में सभी नियंत्रणों को कैसे अक्षम करूं?
- 24. मैं लाइन सेगमेंट के सामान्य वेक्टर की गणना कैसे करूं?
- 25. मैं अपनी कक्षाओं के बीच प्रतिनिधियों को कैसे स्थापित करूं?
- 26. दो सर्किलों के लिए सामान्य सभी बिंदुओं को ढूंढना
- 27. एंड्रॉइड में पेड़ बिंदुओं के माध्यम से मैं वक्र कैसे आकर्षित करूं?
- 28. मैं पर्ल में दो लाइन डिलीमीटरों के बीच लाइनों को कैसे निकालूं?
- 29. मैं डेटाफ्रेम प्लॉट से कुछ कॉलम कैसे बहिष्कृत करूं?
- 30. डी-आयामी क्षेत्र की सतह पर एन बिंदुओं को लगभग साजिश के अलावा कैसे प्लॉट करें?
वास्तव में अच्छी तरह काम किया, धन्यवाद! –
आप परीक्षण भी जोड़ सकते हैं: 'एन = 1000; जोड़े = शून्य (2,499500); कश्मीर = 0; मैं = 1: एन के लिए, जे = i + 1: एन, के = के + 1; जोड़े (:, कश्मीर) = [j; मैं]; अंत, अंत 'गैर-वेक्टरीकृत संस्करण के साथ अंतर दिखाने के लिए (हैंकेल समाधान अभी भी तेज़ है!) – Amro