कैसे एक और 2d सरणी में नक़ल 2d सरणी के सूचक खोजने के लिए [डुप्लिकेट]

Nov 25 2020

मेरे पास 2 डी के बराबर सरणियाँ हैं और यह जानना चाहते हैं कि एक सरणी एक दूसरे में कहां उत्पन्न हो रही है:

big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-9., 0., 13.]])

फिर मैं उन पंक्तियों के संकेत प्राप्त करना चाहता हूं big_arrayजिनमें से किसी भी पंक्तियों के समान हैं small_array। मैं np.in1d2d सरणियों की तरह somthing करना चाहता हूँ । मेरा मतलब है कि मेरे पास है:

result= [1, 3]

मैंने पहले ही निम्नलिखित कोड की कोशिश की थी लेकिन यह सफल नहीं था:

result=[([any(i == big_array ) for i in small_array])]

अग्रिम में, मैं किसी भी मदद की सराहना करता हूं।

जवाब

1 Djib2011 Nov 25 2020 at 08:56

आप क्या चाहते हैं:

sum([row in small_array for row in big_array])

उदाहरण:

import numpy as np
big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])

result = sum([row in small_array for row in big_array])
print(result)

2


संपादित करें (स्पष्टीकरण के बाद):

एक पायथोनिक समाधान:

[i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]

उदाहरण:

big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])

result = [i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]

print(result)

[१, २]

नोट : आप शायद कुछ बेहतर कर सकते हैं np.where, यदि आपके पास बहुत बड़ी सरणियाँ हैं तो आपको इसे देखना चाहिए