python - How to efficiently apply an operator to the cartesian product of two arrays? -
मेरे पास a = array है ([1, 2, 3, 4, 5])
और b = सरणी ([10, 20, 30, 40, 50])
। मुझे चाहिए:
सरणी ([[-9, -19, -29, -39, -49], [-8, -18, -28, -38, -48], [-7, -17, -27, -37, -47], [-6, -16, -26, -36, -46], [-5, -15, -25, -35, -45] ])
ऐसा करने का सबसे प्रभावी तरीका क्या है? मैं
np.transpose ([a]) - np.tile (b, (लेन), 1))
हालांकि मुझे आश्चर्य है अगर इससे कोई और अधिक कुशल तरीका है, यदि a
बहुत बड़ा है, जो b
को कॉपी करने की आवश्यकता नहीं होगी (या इसके विपरीत)।
np.add
, जैसे np.add
,
कोड> एनपी.एमटीपीली , np.divide
, np.logical_and
, np.bitwise_and
, आदि में "बाहरी" विधि जो "गुणा तालिकाओं" के बराबर बनाने के लिए इस्तेमाल की जा सकती है:
में [76]: np.subtract.outer (a, b) बाहर [76]: सरणी ([[- 9, -19, -29, -39, -49], [-8, -18, -28, -38, -48], [-7, -17, -27, -37, -47], [ -6, -16, -26, -36, -46], [-5, -15, -25, -35, -45]])
या, प्रसारण का उपयोग कर: [96]: एक [:, कोई नहीं] - बी आउट [96]: सरणी ([[-9, -19, -29, -39, -49], [- 8, -18, -28, -38, -48], [-7, -17, -27, -37, -47], [-6, -16, -26, -36, -46], [-5, -15, -25, -35, -45]]) < / पूर्व>
दोनों के प्रदर्शन समान हैं:
में [98]: a = np.tile (a, 1000) में [99]: b = np। टाइल (बी, 1000) में [100]:% timeit a [:, None] - b 10 loops, सर्वोत्तम 3: 88.3 एमएस प्रति पाश में [101]:% timeit np.subtract.outer (a, b) 10 लूप, सबसे अच्छा 3: 87.8 एमएस प्रति लूप में [102]:% timeit np.transpose ([ए]) - एनपी.थाइल (बी, (लेन (ए), 1)) 10 छोरों, सबसे अच्छा 3: 120 एमएस प्रति लूप
Comments
Post a Comment