2009-11-09 12 views
8

मैंने पढ़ा है कि पायथन वास्तव में 2 डी सरणी का समर्थन नहीं करता बल्कि एक सरणी की सरणी है। मैं एक सरणी चीज की सरणी समझता हूं लेकिन 2 डी सरणी का समर्थन करके इसका क्या अर्थ है?2 डी सरणी समर्थन का क्या अर्थ है?

सी में एक 2 डी सरणी बस कुछ फैंसी गणित (Seen here) करके एक -1 डी सरणी में बदल जाती है। क्या ऐसी भाषाएं हैं जो वास्तविक 2 डी सरणी लागू करती हैं?

मदद के लिए धन्यवाद और मुझे आशा है कि मैं एक नकली सवाल नहीं लिखा है; यदि ऐसा है तो मुझे एक लिंक मेरे सवाल :) देना है और उसे बंद

उत्तर

10

भाषाओं कि 2 डी (या 3 डी, आदि) सरणियों को लागू कर रहे हैं। फोरट्रान उनमें से एक है। इसका मतलब है कि आप array[x,y] जैसे सरणी अनुक्रमणिका अभिव्यक्ति लिख सकते हैं और भाषा सही तत्व खोजने के लिए गणित का ख्याल रखेगी।

इसके अलावा, Numpy अजगर एक अंकीय विस्तार है कि एन-आयामी सरणी प्रदान करता है।

+0

न्यूम्पी सी एक्सटेंशन का उपयोग करता है, इसलिए यह सी सरणी के साथ फैंसी पॉइंटर गणित पर वापस आ गया है। – Nope

+4

numpy उपयोग फैंसी सूचक गणित के लेखक। आप इसके उपयोगकर्ता के रूप में नहीं है। –

1

फोरट्रान में वास्तविक बहु-आयामी सरणी हैं। This link फोरट्रान 77 मामले में उनके बारे में बात करता है।

2

सी # बहु-आयामी arrays है, लेकिन वे के रूप में दांतेदार सरणियों के खिलाफ सिफारिश कर रहे हैं (सरणियों के सरणियों) अधिक performant हैं।

+0

क्या आपके पास इसके लिए कोई संदर्भ है? –

+0

http://www.codeproject.com/KB/dotnet/arrays.aspx – SLaks

+0

http://uksbsguy.com/blogs/doverton/archive/2007/08/31/how-to-improve-array-performance-in -नेट-प्रोग्रामिंग.एएसपीएक्स – SLaks

1

मुझे लगता है कि '2 डी सरणियों के समर्थन' का अर्थ है कि भाषा आप डेटा का उपयोग करने के रूप में अगर यह एक 2 डी सरणी था अनुमति देता है। ग फैंसी गणित सरणी निर्माणों द्वारा छिपा है में:

char arr[5][5]; 
char c = arr[2][3]; 

वहाँ के रूप में अच्छी सूचक arithmetics द्वारा ऐसा करने के लिए (जो आप शायद के रूप में कल्पना गणित देखें) एक तरीका है।

वास्तविकता मेमोरी डेटा के एड्रेस करने योग्य बाइट्स का एक बड़ा हिस्सा है [0,1,2,3,4,5,6 ... स्मृति का अंत] तो 2 डी सरणी की कोई 'मूल' धारणा नहीं है कहीं मेमोरी में वास्तविक पते पर प्रोग्रामर "पंक्ति 1 कोल 2" का अनुवाद करना है। प्रोग्रामिंग भाषाएं आमतौर पर आपको अनुवाद छिपाने का एक तरीका देती हैं।

6

किसी ने पहले ही numpy का उल्लेख किया है, और ओपी ने टिप्पणी की है कि "यह सी एरे के साथ फैंसी पॉइंटर गणित पर वापस आ गया है" - यह एक पूरी तरह से मामूली कार्यान्वयन विस्तार है! चूंकि अंतर्निहित स्मृति (सामान्य ;-) कंप्यूटर को बाइट्स (या शब्दों) की सरणी के रूप में देखा जा सकता है, तो पाठ्यक्रम किसी भी डेटा संरचना जो भी उस सरणी (या इसके स्लाइस) के शीर्ष पर लागू किया गया है "फैंसी पॉइंटर गणित" - डबल-एंडेड कतार, बहु-आयामी सरणी, बाइनरी पेड़, आप इसे नाम देते हैं, अंतर्निहित कार्यान्वयन हमेशा उस पर उबाल लेंगे (जैसे सभी फैंसी नियंत्रण संरचनाएं मशीन स्तर पर सशर्त और बिना शर्त कूदने के लिए उबालती हैं , इत्यादि)। SO WHAT? ये कार्यान्वयन विवरण हैं, बेशक। numpy, फोर्ट्रान और अन्य भाषाओं और पुस्तकालयों की तरह, एन-आयामी सरणी प्रदान करता है - इससे कोई फर्क नहीं पड़ता कि यह उन्हें "गहरे अंदर" कैसे लागू करता है (असल में इसके बारे में सुन्दरता सामने है, क्योंकि आप आसानी से सरणी को फटकार और पुन: पेश कर सकते हैं - यह काफी विशिष्ट है पाइथन के उच्च गुणवत्ता वाले "हुक" के साथ उच्च स्तरीय abstractions प्रदान करने के लिए कैसे वे निम्न स्तर के लोगों से संबंधित हैं ;-)।

उदा।,

>>> import numpy 
>>> x = numpy.arange(12) 
>>> x 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 
>>> x.reshape((3,4)) 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 
>>> x.reshape((4,3)) 
array([[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]]) 
>>> x.reshape((4,3))[::2, ::2] 
array([[0, 2], 
     [6, 8]]) 
>>> x.reshape((4,3))[(0,1,3), ::2] 
array([[ 0, 2], 
     [ 3, 5], 
     [ 9, 11]]) 
>>> 

आप नयी आकृति प्रदान कर सकते हैं, सूचकांक, टुकड़ा और उच्च लचीलापन और उत्कृष्ट प्रदर्शन के साथ एन आयामी सरणी में डेटा को ढालना - तब भी जब यह जानकर कि अंतर्निहित डेटा ब्लॉक सिर्फ इतना है कि एक आयामी सरणी है (यहाँ एक्स पैदा होता है और 1-डी रहता है, लेकिन अगर ऐसा नहीं होता है तो आप अभी भी फ़्लैटिंग द्वारा अंतर्निहित 1-डी सरणी तक पहुंच सकते हैं)।

यह "एन-आयामी सरणी के लिए समर्थन" का अर्थ है (हालांकि अधिकांश अन्य भाषाओं और ढांचे में ऐसे समर्थन की पेशकश करने वाले ढांचे में आपको कम पारदर्शिता, कम कार्यक्षमता या दोनों ;-) मिल सकती है।

+0

+1 पायथन सामान्य रूप से ठंडा है देखें ... – stefanB

1

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

संबंधित मुद्दे