मूल रूप से ट्रांज़ोज़ फ़ंक्शन क्या होता है, यह सरणी के आकार और प्रगति को स्वैप करना है:
>>> a = np.ones((1,2,3))
>>> a.shape
(1, 2, 3)
>>> a.T.shape
(3, 2, 1)
>>> a.strides
(48, 24, 8)
>>> a.T.strides
(8, 24, 48)
1 डी के बराबर सरणी (रैंक -1 एरे) के मामले में आकृति और स्ट्राइड्स 1-तत्व ट्यूपल्स हैं और इन्हें स्वैप नहीं किया जा सकता है, और इस तरह के 1 डी सरणी के ट्रांसफ़र से यह अपरिवर्तित हो जाता है। इसके बजाय, आप एक "पंक्ति-वेक्टर" (आकार की संख्यात्मक सारणी (1, n)
) को "कॉलम-वेक्टर" ( आकार के संख्यात्मक आकार ) में स्थानांतरित कर सकते हैं (n, 1)
। इसे प्राप्त करने के लिए आपको पहले अपने 1D के खसरे को पंक्ति-वेक्टर में बदलना होगा और फिर आकार और स्ट्रैड को स्वैप करना होगा (इसे स्थानांतरित करें)। नीचे एक फ़ंक्शन है जो इसे करता है:
from numpy.lib.stride_tricks import as_strided
def transpose(a):
a = np.atleast_2d(a)
return as_strided(a, shape=a.shape[::-1], strides=a.strides[::-1])
उदाहरण:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> transpose(a)
array([[0],
[1],
[2]])
>>> a = np.arange(1, 7).reshape(2,3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> transpose(a)
array([[1, 4],
[2, 5],
[3, 6]])
बेशक आपको इसे इस तरह से करने की ज़रूरत नहीं है क्योंकि आपके पास 1D सरणी है और आप इसे सीधे (n, 1)
सरणी में a.reshape((-1, 1))
या उसके द्वारा पुनः आकार दे सकते हैं a[:, None]
। मैं सिर्फ यह दर्शाना चाहता था कि एक सरणी कैसे काम करती है।