2012-02-29 11 views
9

निकटतम इस एक summing columns था।मैं सबसे संक्षिप्त पायथन में बहु-आयामी सरणी कैसे जोड़ूं?

तो मैं अपने सवाल में कुछ इसी तरह करेंगे:

my_list = [ [1,2,3,4], 
      [2,4,5,6] ] 

मैं एक सूची समझ के साथ पंक्तियों के योग प्राप्त कर सकते हैं:

मैं नीचे के रूप में एक अजगर 2 डी सूची रखी है,

row_totals = [ sum(x) for x in my_list ] 

एक लाइन में, कैसे मैं पूरे 2 डी सरणी योग कर सकते हैं?

27 

उत्तर

11

आप क्या कर सकते हैं के रूप में आसान के रूप में

sum(map(sum, my_list)) 

या वैकल्पिक रूप से

sum(sum(x) for x in my_list)) 

और यह एक दिन फोन, यदि आप अधिक से अधिक 2 आयाम उम्मीद नहीं है। ध्यान दें कि पहली समाधान map() के उपयोग के कारण, सबसे अधिक संभावना नहीं सबसे तेजी से (निष्पादन समय के रूप में) समाधान है। बेंचमार्क और आवश्यकतानुसार तुलना करें।

अंत में, यदि आप अपने आप को बहुआयामी सरणियों का उपयोग कर पाते हैं, NumPy और इसके बेहतर सरणी के अनुकूल कार्यों के उपयोग पर विचार। यहाँ आपकी समस्या के लिए एक छोटी अंश है:

import numpy as np 

my_list = np.array([[1,2,3,4], [2,4,5,6]]) 
np.sum(my_list) 

इस आयाम अपने सरणियों हो सकता है की किसी भी संख्या के लिए काम करेगा।

+0

'map' स्वाभाविक रूप से धीमा नहीं है। – Marcin

+0

@ मार्सिन यह पायथन 2.x में है। – katrielalex

+0

@katrielalex: जो नंबर आप से असहमत: http://ideone.com/4RXfR बनाम http://ideone.com/6tOEJ – Marcin

3
>>> sum ([ sum(x) for x in [[1,2,3,4], [2,4,5,6]] ]) 
27 
+0

एक जनरेटर नहीं एक सूची का उपयोग करें समझ ('()' नहीं '[] ')। – katrielalex

+0

@ katrielalex: आप सही हैं, साथ ही दिमाग में भी। मैंने परीक्षण करने के लिए ओपी कोड लिया, फिर वर्गों को हटाने के लिए भूल गए। – CapelliC

3

एक अन्य समाधान itertools का उपयोग कर:

>>> from itertools import chain 
>>> my_list = [ [1,2,3,4], [2,4,5,6] ] 
>>> sum(chain(*my_list)) 
27 
1
>>> from itertools import chain 
>>> my_list = [[1,2,3,4], [2,4,5,6]] 
>>> sum(chain.from_iterable(my_list)) 
27 
0

आप पहली बार भीतरी सूचियों को एक साथ जोड़ने के लिए राशि का उपयोग करें और फिर जोड़ सकते हैं, जिसके परिणामस्वरूप चपटा सूची:

>>> my_list = [ [1,2,3,4], [2,4,5,6] ] 

>>> sum(my_list, []) 
[1, 2, 3, 4, 2, 4, 5, 6] 

>>> sum(sum(my_list, [])) 
27 
+0

आपका जवाब अन्य उत्तर यहाँ के शीर्ष पर कुछ भी जोड़ने करता है? – rayryeng

संबंधित मुद्दे