कैसे एक और 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.in1d
2d सरणियों की तरह 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
, यदि आपके पास बहुत बड़ी सरणियाँ हैं तो आपको इसे देखना चाहिए