कुछ सूचकांकों पर अजगर सुन्न 2D सरणी

Jan 18 2021

इस तरह एक 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]

जवाब

2 PabloC Jan 18 2021 at 10:00

NumPy का उपयोग करें:

import numpy as np

img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
1 TấnNguyên Jan 18 2021 at 10:16

यदि परिणाम [5, 7, 9] होगा जो सूची के कॉलम के ऊपर है। फिर आसान:

img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)

परिणाम:

array([5, 7, 9])
1 MadPhysicist Jan 18 2021 at 10:07

जब आप एक फैंसी इंडेक्स की आपूर्ति करते हैं, तो इंडेक्स टपल का प्रत्येक तत्व एक अलग अक्ष का प्रतिनिधित्व करता है। सूचकांक सरणियों का आकार आपके द्वारा प्राप्त आउटपुट के आकार को प्रसारित करता है।

आपके मामले में, indices.Tप्रत्येक अक्ष में पंक्तियाँ सूचक हैं। आप उन्हें एक इंडेक्स टपल और अपेंडेड में बदल सकते हैं slice(None), जो प्रोग्राम के बराबर है :। आप सीधे परिणामी 2D सरणी का अर्थ ले सकते हैं:

img[tuple(indices.T) + (slice(None),)].sum(0)

दूसरा तरीका है कि आपरेट ऑपरेटर का उपयोग करें:

img[(*indices.T, slice(None))].sum(0)