पायथन न्यूमपी में एक आयाम और अक्ष क्या है?


82

मैं पायथन NumPyमॉड्यूल के साथ कोडिंग कर रहा हूं । यदि 3 डी अंतरिक्ष में एक बिंदु के निर्देशांक के रूप में वर्णित किया जाता है [1, 2, 1], तो क्या यह तीन आयाम, तीन अक्ष, तीन की रैंक नहीं होगा? या यदि वह एक आयाम है तो क्या उसे अंक (बहुवचन) नहीं होना चाहिए, बिंदु नहीं?

यहाँ प्रलेखन है:

Numpy आयामों को अक्ष कहा जाता है। कुल्हाड़ियों की संख्या रैंक है। उदाहरण के लिए, 3 डी अंतरिक्ष में एक बिंदु के निर्देशांक [1, 2, 1] रैंक 1 की एक सरणी है, क्योंकि इसमें एक अक्ष है। उस अक्ष की लंबाई 3 है।

स्रोत: http://wiki.scipy.org/Tentative_NumPy_Tutorial

जवाबों:


97

सुपीरियर arrayएस में, आयामीता इसे संदर्भित करने के लिए axesआवश्यक संख्या को संदर्भित करती है , किसी ज्यामितीय स्थान की आयामीता को नहीं। उदाहरण के लिए, आप एक 3D सरणी के साथ 3D स्थान में बिंदुओं के स्थानों का वर्णन कर सकते हैं:

array([[0, 0, 0],
       [1, 2, 3],
       [2, 2, 2],
       [9, 9, 9]])

कौन सा है shapeकी (4, 3)और आयाम 2। लेकिन यह 3 डी स्पेस का वर्णन कर सकता है क्योंकि प्रत्येक पंक्ति ( axis1) की लंबाई तीन है, इसलिए प्रत्येक पंक्ति एक बिंदु के स्थान का x, y और z घटक हो सकती है। axis0 की लंबाई बिंदुओं की संख्या को इंगित करती है (यहां, 4)। हालाँकि, यह उस गणित के लिए एक अनुप्रयोग है जो कोड का वर्णन कर रहा है, न कि सरणी की एक विशेषता। गणित में, एक वेक्टर का आयाम उसकी लंबाई (जैसे, x, y, और एक 3D वेक्टर का घटक) होगा, लेकिन संख्यात्मक रूप से, किसी भी "वेक्टर" को वास्तव में भिन्न लंबाई का 1d सरणी माना जाता है। सरणी को परवाह नहीं है कि अंतरिक्ष के आयाम (यदि कोई हो) का वर्णन किया जा रहा है।

आप इसके साथ खेल सकते हैं, और एक सरणी के आयाम और आकार की संख्या देख सकते हैं:

In [262]: a = np.arange(9)

In [263]: a
Out[263]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In [264]: a.ndim    # number of dimensions
Out[264]: 1

In [265]: a.shape
Out[265]: (9,)

In [266]: b = np.array([[0,0,0],[1,2,3],[2,2,2],[9,9,9]])

In [267]: b
Out[267]: 
array([[0, 0, 0],
       [1, 2, 3],
       [2, 2, 2],
       [9, 9, 9]])

In [268]: b.ndim
Out[268]: 2

In [269]: b.shape
Out[269]: (4, 3)

Arrays के कई आयाम हो सकते हैं, लेकिन वे दो या तीन से ऊपर की कल्पना करना कठिन हो जाते हैं:

In [276]: c = np.random.rand(2,2,3,4)

In [277]: c
Out[277]: 
array([[[[ 0.33018579,  0.98074944,  0.25744133,  0.62154557],
         [ 0.70959511,  0.01784769,  0.01955593,  0.30062579],
         [ 0.83634557,  0.94636324,  0.88823617,  0.8997527 ]],

        [[ 0.4020885 ,  0.94229555,  0.309992  ,  0.7237458 ],
         [ 0.45036185,  0.51943908,  0.23432001,  0.05226692],
         [ 0.03170345,  0.91317231,  0.11720796,  0.31895275]]],


       [[[ 0.47801989,  0.02922993,  0.12118226,  0.94488471],
         [ 0.65439109,  0.77199972,  0.67024853,  0.27761443],
         [ 0.31602327,  0.42678546,  0.98878701,  0.46164756]],

        [[ 0.31585844,  0.80167337,  0.17401188,  0.61161196],
         [ 0.74908902,  0.45300247,  0.68023488,  0.79672751],
         [ 0.23597218,  0.78416727,  0.56036792,  0.55973686]]]])

In [278]: c.ndim
Out[278]: 4

In [279]: c.shape
Out[279]: (2, 2, 3, 4)


9

यह रैंक वन का है, क्योंकि इसे इंडेक्स करने के लिए आपको एक इंडेक्स की जरूरत होती है। उस एक अक्ष की लंबाई 3 है, सूचकांक अनुक्रमण के रूप में यह तीन अलग-अलग मान ले सकता है v[i], i=0..2:।


8

इस उत्तर में से केवल उत्तर का भाग चिपकाएँ :

Numpy में, आयाम , अक्ष / अक्ष , आकार संबंधित हैं और कभी-कभी समान अवधारणाएं:

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4]])

आयाम

में गणित / भौतिकी , आयाम या आयामी स्वरूप अनौपचारिक रूप से एक अंतरिक्ष के भीतर किसी भी बिंदु निर्दिष्ट करने के लिए की जरूरत निर्देशांक की न्यूनतम संख्या के रूप में परिभाषित किया गया है। लेकिन Numpy में , खसखस के अनुसार , यह अक्ष / अक्ष के समान है:

Numpy आयामों को अक्ष कहा जाता है। कुल्हाड़ियों की संख्या रैंक है।

In [3]: a.ndim  # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2

अक्ष / कुल्हाड़ियों

n वें सूचकांक करने के लिए एक समन्वय arrayNumpy में। और बहुआयामी सरणियों में अक्ष प्रति एक सूचकांक हो सकता है।

In [4]: a[1,0]  # to index `a`, we specific 1 at the first axis and 0 at the second axis.
Out[4]: 3  # which results in 3 (locate at the row 1 and column 0, 0-based index)

आकार

प्रत्येक उपलब्ध अक्ष के साथ कितने डेटा का वर्णन करता है।

In [5]: a.shape
Out[5]: (2, 2)  # both the first and second axis have 2 (columns/rows/pages/blocks/...) data

5

आप समूह परिचालनों में अक्ष पैरामीटर का उपयोग कर सकते हैं , अक्ष = 0 के मामले में प्रत्येक स्तंभ के तत्वों पर Numpy कार्रवाई करता है, और यदि अक्ष = 1, तो यह पंक्तियों पर कार्रवाई करता है।

test = np.arange(0,9).reshape(3,3)

Out[3]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

test.sum(axis=0)
Out[5]: array([ 9, 12, 15])

test.sum(axis=1)
Out[6]: array([ 3, 12, 21])

4

यह मैं इसे समझता हूं। एक बिंदु 1D वस्तु है। आप केवल इसकी स्थिति को परिभाषित कर सकते हैं। इसका कोई आयाम नहीं है। एक पंक्ति या सतह एक 2D वस्तु है। आप इसे क्रमशः अपनी स्थिति और लंबाई या क्षेत्र दोनों के द्वारा परिभाषित कर सकते हैं, जैसे आयत, वर्ग, वृत्त A आयतन एक 3D वस्तु है। आप इसे इसकी स्थिति, सतह क्षेत्र / लंबाई और मात्रा जैसे क्षेत्र, घन से परिभाषित कर सकते हैं।

इससे, आप एक धुरी (आयाम) द्वारा एक बिंदु में नुमाइपी को परिभाषित करेंगे, भले ही आपके द्वारा उपयोग किए जाने वाले गणितीय अक्षों की संख्या की परवाह किए बिना। X और y कुल्हाड़ियों के लिए, एक बिंदु को [2,4] के रूप में परिभाषित किया गया है, और x, y और z अक्षों के लिए, एक बिंदु को [2,4,6] के रूप में परिभाषित किया गया है। ये दोनों बिंदु हैं, इस प्रकार 1 डी।

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

एक वॉल्यूम को परिभाषित करने के लिए 4 (एक टेट्राहेड्रॉन) या अधिक बिंदुओं की आवश्यकता होगी, लेकिन फिर भी तीसरे आयाम (3 डी) के लिए अंक के 'नेस्टिंग' को बनाए रखना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.