Numpy सरणी के स्तंभों पर पुनरावृति कैसे करें?


109

मान लीजिए कि मेरे पास और mxn सरणी है। मैं पूरे कॉलम पर कुछ ऑपरेशन करने के लिए इस एरे के प्रत्येक कॉलम को फंक्शन में पास करना चाहता हूं। मैं सरणी के स्तंभों पर कैसे पुनरावृति करूं?

उदाहरण के लिए, मेरे पास 4 x 3 सरणी है

1  99 2
2  14 5
3  12 7
4  43 1

for column in array:
  some_function(column)

जहां कॉलम पहले पुनरावृत्ति में "1,2,3,4", दूसरे में "99,14,12,43" और तीसरे में "2,5,7,1" होगा।


2
क्या आप एक इंडेक्स का उपयोग नहीं कर सकते हैं --- stackoverflow.com/questions/4455076/…
ev-br

जवाबों:


225

अपने सरणी के ट्रांसपोज़्ड पर केवल पुनरावृति:

for column in array.T:
   some_function(column)

6
परिणाम को एक एकल सरणी में वापस संयोजित करने का एक अच्छा तरीका क्या होगा?
इब्राहिम मुहम्मद

46
सोच रहे लोगों के लिए, array.Tमहंगा नहीं है, क्योंकि यह सिर्फ array( ' एक दिलचस्प चर्चा के लिए इस जवाब को देखें ' ) को बदल देता है
drevicko

19

इससे आपको एक शुरुआत मिलनी चाहिए

>>> for col in range(arr.shape[1]):
    some_function(arr[:,col])


[1 2 3 4]
[99 14 12 43]
[2 5 7 1]

7
यह मुझे pythonic नहीं दिखता है।
gronostaj

@gronostaj बेशक यह पायथोनिक है। जब आप एक बहुआयामी सरणी के मनमाने अक्ष पर पुनरावृति करना चाहते हैं तो आप इस समस्या को कैसे हल करेंगे?
नील जी

1
@ नील यह सवाल 2-आयामी सरणियों के बारे में कड़ाई से है।
ग्रोनोस्तज

6

तीन आयामी सरणी के लिए आप कोशिश कर सकते हैं:

for c in array.transpose(1, 0, 2):
    do_stuff(c)

डॉक्स को देखें कि कैसे array.transposeकाम करता है। मूल रूप से आप निर्दिष्ट कर रहे हैं कि किस आयाम को स्थानांतरित करना है। इस मामले में हम दूसरे आयाम (जैसे कॉलम) को पहले आयाम में स्थानांतरित कर रहे हैं।



4

आप स्तंभों के माध्यम से पुनरावृत्ति करने के लिए अनज़िप का भी उपयोग कर सकते हैं

for col in zip(*array):
   some_function(col)

2

उदाहरण के लिए आप मैट्रिक्स में प्रत्येक कॉलम का एक मतलब खोजना चाहते हैं। आइए निम्नलिखित मैट्रिक्स बनाएं

mat2 = np.array([1,5,6,7,3,0,3,5,9,10,8,0], dtype=np.float64).reshape(3, 4)

मतलब के लिए कार्य है

def my_mean(x):
    return sum(x)/len(x)

क्या जरूरत है और कोलोन वेक्टर 'परिणाम' में परिणाम स्टोर करने के लिए

results = np.zeros(4)
for i in range(0, 4):
    mat2[:, i] = my_mean(mat2[:, i])

results = mat2[1,:]      

परिणाम हैं: सरणी ([4.33333333, 5., 5.66666667, 4.])


0

वैकल्पिक रूप से, आप उपयोग कर सकते हैं enumerate। यह आपको कॉलम नंबर और कॉलम मान भी देता है।

for num, column in enumerate(array.T):
    some_function(column) # column: Gives you the column value as asked in the question
    some_function(num) # num: Gives you the column number 

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.