شرح - في Python NumPy ما هو البعد والمحاور؟





download install (5)


يمكنك أيضًا استخدام معلمة المحور في عمليات المجموعة ، في حالة axis = 0 يقوم Numpy بتنفيذ الإجراء على عناصر كل عمود ، وإذا كان axis = 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])

أنا ترميز مع وحدة Pythons NumPy . إذا تم وصف إحداثيات نقطة في مساحة ثلاثية الأبعاد بأنها [1, 2, 1] ، ألا يكون ذلك ثلاثة أبعاد ، وثلاثة محاور ، ورتبة ثلاثة؟ أو إذا كان هذا بعدًا واحدًا ، ألا يجب أن تكون نقاط (جمع) ، وليس نقطة؟

هنا الوثائق:

في أبعاد Numpy تسمى المحاور. عدد المحاور هو رتبة. على سبيل المثال ، تكون إحداثيات نقطة في المسافة الثلاثية الأبعاد [1 ، 2 ، 1] صفيفًا من الرتبة 1 ، نظرًا لأنها تحتوي على محور واحد. هذا المحور لديه طول 3.

المصدر: http://wiki.scipy.org/Tentative_NumPy_Tutorial




في array s numpy s ، يشير البعد إلى عدد axes المطلوبة لفهرسته ، وليس بعدية أي مساحة هندسية. على سبيل المثال ، يمكنك وصف مواقع النقاط في مساحة ثلاثية الأبعاد باستخدام مصفوفة ثنائية الأبعاد:

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

التي لديها shape (4, 3) والبعد 2 . ولكن يمكن أن يصف الفضاء ثلاثي الأبعاد لأن طول كل صف ( axis 1) هو ثلاثة ، لذلك يمكن أن يكون كل صف مكون x و y و z في موقع النقطة. يشير طول axis 0 إلى عدد النقاط (هنا ، 4). ومع ذلك ، هذا هو أكثر من تطبيق على الرياضيات التي تصف التعليمات البرمجية ، وليس سمة الصفيف نفسه. في الرياضيات ، سيكون أبعاد المتجه طوله (على سبيل المثال ، مكونات x ، y ، و z من متجه ثلاثي الأبعاد) ، ولكن في numpy ، يعتبر أي "متجه" في الحقيقة مجرد مصفوفة 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)

يمكن أن تحتوي المصفوفات على أبعاد كثيرة ، ولكن يصعب تصورها فوق اثنين أو ثلاثة:

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)



إنه من المرتبة الأولى ، حيث تحتاج إلى فهرس واحد لفهرسته. يحتوي هذا المحور على الطول 3 ، حيث يمكن للفهرس أن يأخذ ثلاث قيم مختلفة: v[i], i=0..2 .




هذه هي الطريقة التي أفهمها. النقطة هي كائن 1D. يمكنك فقط تحديد موقعها. ليس لها أبعاد. الخط أو السطح هو كائن ثنائي الأبعاد. يمكنك تعريفه من خلال موضعه وطوله أو مساحته على التوالي ، على سبيل المثال ، المستطيل ، المربع ، وحدة التخزين في الدائرة A هو كائن ثلاثي الأبعاد. يمكنك تعريفه من خلال موقعه ومساحة سطحه / أطواله وحجمه على سبيل المثال Sphere و Cube.

من هذا ، ستقوم بتحديد نقطة في NumPy بواسطة محور واحد (البعد) ، بغض النظر عن عدد المحاور الرياضية التي تستخدمها. بالنسبة لمحاكي x و y ، يتم تعريف نقطة كـ [2،4] ، وبالنسبة لمحاور x و y و z ، يتم تعريف نقطة على أنها [2،4،6]. كل من هذه النقاط ، وبالتالي 1D.

لتحديد خط ، ستكون هناك حاجة لنقطتين. سيتطلب هذا شكلًا من "التعشيش" للنقاط إلى البعد الثاني (ثنائي الأبعاد). على هذا النحو ، يمكن تعريف الخط باستخدام x و y فقط مثل [[2،4] ، [6،9]] أو باستخدام x ، y و z كـ [[2،4،6] ، [6،9،12 ]]. بالنسبة إلى السطح ، سيتطلب الأمر ببساطة مزيدًا من النقاط لوصفه ، ولكنه لا يزال كائنًا ثنائي الأبعاد. على سبيل المثال ، يحتاج المثلث إلى 3 نقاط بينما يحتاج المستطيل / المربع إلى 4 نقاط.

سيتطلب المجلد 4 (رباعي الوجوه) أو أكثر من النقاط لتعريفه ، ولكن مع الحفاظ على "تداخل" النقاط إلى البعد الثالث (3D).




دعونا ننظر إلى الجواب بطريقة أكثر تجريدًا:

لنفترض أن لدينا هذا الرمز في x.py:

...
<Block A>
if __name__ == '__main__':
    <Block B>
...

يتم تشغيل الكتل A و B عند تشغيل "x.py".

ولكن يتم تشغيل "A" فقط (وليس B) عندما نقوم بتشغيل وحدة نمطية أخرى ، "y.py" على سبيل المثال ، حيث يتم استيراد xy ويتم تشغيل الرمز من هناك (مثل عندما تكون وظيفة في "x.py" اتصل من y.py).





python numpy