सीधे शब्दों में कहें, numpy.newaxis
करने के लिए प्रयोग किया जाता है आयाम में वृद्धि से मौजूदा सरणी के एक और आयाम जब इस्तेमाल किया, एक बार । इस प्रकार,
और इसी तरह..
यहाँ एक दृश्य चित्रण है जिसमें 1 डी सरणी को 2 डी सरणियों के प्रचार को दर्शाया गया है ।
परिदृश्य -1 : np.newaxis
तब काम में आ सकता है जब आप स्पष्ट रूप से 1D सरणी को पंक्ति वेक्टर या कॉलम वेक्टर में बदलना चाहते हैं , जैसा कि ऊपर चित्र में दिखाया गया है।
उदाहरण:
# 1D array
In [7]: arr = np.arange(4)
In [8]: arr.shape
Out[8]: (4,)
# make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :] # arr[None, :]
In [10]: row_vec.shape
Out[10]: (1, 4)
# make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis] # arr[:, None]
In [12]: col_vec.shape
Out[12]: (4, 1)
परिदृश्य -2 : हम का उपयोग करना चाहते हैं numpy प्रसारण जबकि कर उदाहरण के लिए, कुछ आपरेशन के भाग के रूप अलावा कुछ सरणियों के।
उदाहरण:
मान लें कि आप निम्नलिखित दो सरणियाँ जोड़ना चाहते हैं:
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([5, 4, 3])
यदि आप इन्हें ऐसे ही जोड़ने का प्रयास करते हैं, तो NumPy निम्नलिखित को बढ़ाएगा ValueError
:
ValueError: operands could not be broadcast together with shapes (5,) (3,)
इस स्थिति में, आप np.newaxis
किसी एक सरणियों के आयाम को बढ़ाने के लिए उपयोग कर सकते हैं ताकि NumPy प्रसारण कर सके ।
In [2]: x1_new = x1[:, np.newaxis] # x1[:, None]
# now, the shape of x1_new is (5, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5]])
अब, जोड़ें:
In [3]: x1_new + x2
Out[3]:
array([[ 6, 5, 4],
[ 7, 6, 5],
[ 8, 7, 6],
[ 9, 8, 7],
[10, 9, 8]])
वैकल्पिक रूप से, आप सरणी में नई अक्ष भी जोड़ सकते हैं x2
:
In [6]: x2_new = x2[:, np.newaxis] # x2[:, None]
In [7]: x2_new # shape is (3, 1)
Out[7]:
array([[5],
[4],
[3]])
अब, जोड़ें:
In [8]: x1 + x2_new
Out[8]:
array([[ 6, 7, 8, 9, 10],
[ 5, 6, 7, 8, 9],
[ 4, 5, 6, 7, 8]])
नोट : निरीक्षण करें कि हम दोनों मामलों में एक ही परिणाम प्राप्त करते हैं (लेकिन एक दूसरे का संक्रमण हो रहा है)।
परिदृश्य -3 : यह परिदृश्य -1 के समान है। लेकिन, आप सरणी को उच्च आयामों में बढ़ावा देने के np.newaxis
लिए एक से अधिक बार उपयोग कर सकते हैं । इस तरह के ऑपरेशन की आवश्यकता कभी-कभी उच्चतर आदेश सरणियों ( यानी टेंसर ) के लिए होती है।
उदाहरण:
In [124]: arr = np.arange(5*5).reshape(5,5)
In [125]: arr.shape
Out[125]: (5, 5)
# promoting 2D array to a 5D array
In [126]: arr_5D = arr[np.newaxis, ..., np.newaxis, np.newaxis] # arr[None, ..., None, None]
In [127]: arr_5D.shape
Out[127]: (1, 5, 5, 1, 1)
Np.newaxis बनाम np.reshape पर अधिक पृष्ठभूमि
newaxis
एक छद्म सूचकांक के रूप में भी कहा जाता है जो एक अक्ष के अस्थायी जोड़ को एक मल्टीरे में अनुमति देता है।
np.newaxis
सरणी से बनाना, जबकि टुकड़ा करने की क्रिया ऑपरेटर का उपयोग करता है np.reshape
(; और यह है यह सोचते हैं कि आकार-प्रकार के नया स्वरूप दे इच्छित लेआउट करने के लिए सरणी चाहिए एक के लिए reshape
होने के लिए)।
उदाहरण
In [13]: A = np.ones((3,4,5,6))
In [14]: B = np.ones((4,6))
In [15]: (A + B[:, np.newaxis, :]).shape # B[:, None, :]
Out[15]: (3, 4, 5, 6)
उपरोक्त उदाहरण में, हमने B
(प्रसारण का उपयोग करने के लिए) पहले और दूसरे अक्ष के बीच एक अस्थायी अक्ष डाला । ब्रॉडकास्टिंग ऑपरेशन का काम np.newaxis
करने के लिए एक अनुपस्थित अक्ष को यहाँ भरा गया है ।
जनरल युक्ति : आप भी उपयोग कर सकते हैंNone
के स्थान परnp.newaxis
; ये वास्तव में एक ही वस्तु हैं ।
In [13]: np.newaxis is None
Out[13]: True
पुनश्च यह भी महान जवाब देखें: newaxis बनाम आयाम जोड़ने के लिए नयी आकृति प्रदान करें
except that it changes a row vector to a column vector?
पहला उदाहरण पंक्ति वेक्टर नहीं है। यह एक matlab अवधारणा है। अजगर में यह केवल 1-आयामी वेक्टर है जिसमें कोई पंक्ति या स्तंभ अवधारणा नहीं है। पंक्ति या स्तंभ वेक्टर 2-