कुछ सूचकांकों पर अजगर सुन्न 2D सरणी
इस तरह एक 2-d सरणी है:
img = [
[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[2, 2, 2], [3, 2, 3], [6, 7, 6]],
[[9, 8, 1], [9, 8, 3], [9, 8, 5]]
]
और मैं केवल कुछ सूचकांकों का योग प्राप्त करना चाहता हूं जो इस प्रकार हैं:
indices = [[0, 0], [0, 1]] # which means img[0][0] and img[0][1]
# means here is represents
इस लिंक में स्टैकओवरफ़्लो में लगभग 1-डी सरणी के बारे में इसी तरह का सवाल था , लेकिन जब मैंने उपयोग करने की कोशिश की तो यह एक त्रुटि हुई print(img[indices])
। क्योंकि मैं यह स्पष्ट करना चाहता हूं कि तत्व img
वे हैं जो सूचकांकों द्वारा इंगित होते हैं, और फिर प्राप्त करते हैं मीन इसका योग।
अपेक्षित उत्पादन
[5, 7, 9]
जवाब
NumPy का उपयोग करें:
import numpy as np
img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
यदि परिणाम [5, 7, 9] होगा जो सूची के कॉलम के ऊपर है। फिर आसान:
img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)
परिणाम:
array([5, 7, 9])
जब आप एक फैंसी इंडेक्स की आपूर्ति करते हैं, तो इंडेक्स टपल का प्रत्येक तत्व एक अलग अक्ष का प्रतिनिधित्व करता है। सूचकांक सरणियों का आकार आपके द्वारा प्राप्त आउटपुट के आकार को प्रसारित करता है।
आपके मामले में, indices.T
प्रत्येक अक्ष में पंक्तियाँ सूचक हैं। आप उन्हें एक इंडेक्स टपल और अपेंडेड में बदल सकते हैं slice(None)
, जो प्रोग्राम के बराबर है :
। आप सीधे परिणामी 2D सरणी का अर्थ ले सकते हैं:
img[tuple(indices.T) + (slice(None),)].sum(0)
दूसरा तरीका है कि आपरेट ऑपरेटर का उपयोग करें:
img[(*indices.T, slice(None))].sum(0)