a = np.array([[1, 2], [1, 2]])
print(a.shape)
# (2, 2)
# indexing with np.newaxis inserts a new 3rd dimension, which we then repeat the
# array along, (you can achieve the same effect by indexing with None, see below)
b = np.repeat(a[:, :, np.newaxis], 3, axis=2)
print(b.shape)
# (2, 2, 3)
print(b[:, :, 0])
# [[1 2]
# [1 2]]
print(b[:, :, 1])
# [[1 2]
# [1 2]]
print(b[:, :, 2])
# [[1 2]
# [1 2]]
कहा करने के बाद कि, आप अक्सर अपने सरणियों दोहराने से बचें कर सकते हैं: शायद स्पष्ट तरीका np.repeat
उपयोग करने के लिए है broadcasting का उपयोग करके पूरी तरह से।
c = np.array([1, 2, 3])
a
रहे हैं: उदाहरण के लिए, मान लीजिए कि मैं एक (3,)
वेक्टर जोड़ना चाहते थे करते हैं। मैं तीसरे आयाम में a
3 बार की सामग्री की प्रतिलिपि बना सकता हूं, फिर पहले और दूसरे आयामों में c
की सामग्री दो बार कॉपी कर सकता हूं, ताकि मेरे दोनों सरणी (2, 2, 3)
थे, फिर उनकी राशि की गणना करें। *
d = a[..., None] + c[None, None, :]
यहाँ, a[..., None]
आकार (2, 2, 1)
है और c[None, None, :]
आकार (1, 1, 3)
है: हालांकि, यह ऐसा करने के लिए बहुत सरल और तेज है। मैं योग की गणना करते हैं, तो परिणाम 'का प्रसारण', हो जाता है आकार 1 के आयामों के साथ बाहर मुझे आकार (2, 2, 3)
का एक परिणाम दे रही है:
print(d.shape)
# (2, 2, 3)
print(d[..., 0]) # a + c[0]
# [[2 3]
# [2 3]]
print(d[..., 1]) # a + c[1]
# [[3 4]
# [3 4]]
print(d[..., 2]) # a + c[2]
# [[4 5]
# [4 5]]
प्रसारण एक बहुत शक्तिशाली तकनीक है, क्योंकि यह अतिरिक्त बनाने में शामिल भूमि के ऊपर से बचा जाता है स्मृति में आपके इनपुट सरणी की दोहराई गई प्रतियां।
* हालांकि मैं उन्हें स्पष्टता के लिए शामिल है, c
में None
सूचकांक वास्तव में आवश्यक नहीं हैं - आप भी a[..., None] + c
, यानि कि कर सकता है एक (3,)
सरणी के खिलाफ एक (2, 2, 1)
सरणी प्रसारण करते हैं। ऐसा इसलिए है क्योंकि अगर किसी एक सरणी में दूसरे की तुलना में कम आयाम होते हैं तो केवल पीछे दो सरणी के आयामों को संगत होने की आवश्यकता होती है। एक और अधिक जटिल उदाहरण के लिए:
a = np.ones((6, 1, 4, 3, 1)) # 6 x 1 x 4 x 3 x 1
b = np.ones((5, 1, 3, 2)) # 5 x 1 x 3 x 2
result = a + b # 6 x 5 x 4 x 3 x 2
कि यह वास्तव में सही परिणाम देता है सत्यापित करने के लिए पैदा करता है, तो आप भी प्रिंट कर सकते हैं 'ख [:,:, 0] ',' बी [:,:, 1] ', और' बी [:,:, 2] '। प्रत्येक तीसरा आयाम टुकड़ा मूल 2 डी सरणी की एक प्रति है। यह सिर्फ प्रिंट (बी) 'को देखकर स्पष्ट नहीं है। – ely
यह एक अच्छा जवाब है !! धन्यवाद! – drg