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.subtract , 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

Popular posts from this blog

ios - How do I use CFArrayRef in Swift? -

eclipse plugin - Run java code error: Workspace is closed -

c - Error on building source code in VC 6 -