मेरे समस्या निम्नलिखित है,2 डी numpy सरणी में क्लस्टर आकार कैसे खोजें?
मैं उदाहरण के लिए 0 एक 1 से भरा एक 2 डी numpy सरणी, एक दिलचस्प सीमा शर्त (सभी बाहरी तत्वों 0 कर रहे हैं) के साथ है,:
[[0 0 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 1 0 1 0 0 0 1 0]
[0 0 0 0 0 0 1 0 1 0]
[0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 1 0 1 0 0 0]
[0 0 0 0 0 1 1 0 0 0]
[0 0 0 1 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
मैं चाहता हूँ एक ऐसा फ़ंक्शन बनाने के लिए जो इस सरणी और उसके रैखिक आयाम एल को इनपुट पैरामीटर के रूप में लेता है, (इस मामले में एल = 10) और इस सरणी के क्लस्टर आकारों की सूची देता है।
द्वारा "समूहों" मैं सरणी
सरणी तत्व [मैं] [जे] अगर अपने सभी पड़ोसियों शून्य कर रहे हैं अलग है, और के तत्वों 1 की अलग समूहों मतलब अपने पड़ोसियों के तत्व हैं:
[i+1][j]
[i-1][j]
[i][j+1]
[i][j-1]
तो पिछले सरणी में हम आकार (2,1,2,6,1,1,1)
मैं दो कार्यों बनाने के द्वारा इस कार्य को पूरा करने की कोशिश की के 7 समूहों है, पहले एक है एक पुनरावर्ती समारोह:
def clust_size(array,i,j):
count = 0
if array[i][j] == 1:
array[i][j] = 0
if array[i-1][j] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i-1,j)
elif array[i][j-1] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i,j-1)
elif array[i+1][j] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i+1,j)
elif array[i][j+1] == 1:
count += 1
array[i-1][j] = 0
clust_size(array,i,j+1)
return count+1
और इसे एक क्लस्टर के आकार को वापस करना चाहिए। प्रत्येक बार फ़ंक्शन को 1 के बराबर एक सरणी तत्व मिलता है, यह काउंटर "मान" के मान को बढ़ाता है और तत्व के मान को 0 में बदल देता है, इस तरह प्रत्येक '1' तत्व को केवल एक बार गिना जाता है। यदि तत्व के पड़ोसियों में से एक 1 के बराबर है तो फ़ंक्शन स्वयं उस तत्व पर कॉल करता है।
दूसरा समारोह है:
def clust_list(array,L):
sizes_list = []
for i in range(1,L-1):
for i in range(1,L-1):
count = clust_size(array,i,j)
sizes_list.append(count)
return sizes_list
और यह क्लस्टर आकार युक्त सूची वापस आ जाएगी। 1 से एल -1 क्योंकि सभी बाहरी तत्वों 0.
यह काम नहीं करता और मैं नहीं देख सकते हैं, जहां त्रुटि है कर रहे हैं पाश दोहराता के लिए ...
मैं हो, तो हो सकता है सोच रहा था इसे करने का एक आसान तरीका।