मैंने पायथन में कुछ कोड लिखा जो ठीक काम करता है लेकिन बहुत धीमा है; मुझे लगता है कि लूप के कारण। मुझे उम्मीद है कि कोई numpy कमांड का उपयोग कर निम्न परिचालनों को तेज कर सकता है। मुझे लक्ष्य को परिभाषित करने दें।लूप के लिए numpy vectorization
मान लीजिए कि मेरे पास 2 डी numpy सरणी all_CMs
आयाम row
x col
है। उदाहरण के लिए 6
x 11
सरणी पर विचार करें (नीचे चित्र देखें)।
मैं, सभी पंक्तियों के लिए मतलब की गणना करने के अर्थात राशि ⱼ aᵢⱼ एक सरणी में जिसके परिणामस्वरूप चाहते हैं। यह, निश्चित रूप से आसानी से किया जा सकता है। (मैं यह मान फोन
CM_tilde
)अब, के लिए प्रत्येक पंक्ति मैं उनका योग कंप्यूटिंग और सभी स्तंभों की संख्या से विभाजित करके कुछ चयनित मूल्यों, अर्थात् एक निश्चित सीमा से नीचे के सभी मूल्यों का मतलब गणना करना चाहते हैं (
N
)। यदि मान इस परिभाषित दहलीज से ऊपर है, तोCM_tilde
मान (संपूर्ण पंक्ति का माध्य) जोड़ा जाता है। यह मानCM
बाद में कहा जाता है,
CM
मूल्य
इसके अलावा इस के लिए पंक्ति में प्रत्येक तत्व से घटाया जाता है मैं एक numpy सरणी या सूची जहां उन सभी CM
मूल्यों सूचीबद्ध हैं करना चाहते हैं ।
आंकड़ा:
निम्नलिखित कोड काम कर रहा है लेकिन बहुत धीमी गति से (सरणियों बड़ी हो रही है, खासकर अगर)
CM_tilde = np.mean(data, axis=1)
N = data.shape[1]
data_cm = np.zeros((data.shape[0], data.shape[1], data.shape[2]))
all_CMs = np.zeros((data.shape[0], data.shape[2]))
for frame in range(data.shape[2]):
for row in range(data.shape[0]):
CM=0
for col in range(data.shape[1]):
if data[row, col, frame] < (CM_tilde[row, frame]+threshold):
CM += data[row, col, frame]
else:
CM += CM_tilde[row, frame]
CM = CM/N
all_CMs[row, frame] = CM
# calculate CM corrected value
for col in range(data.shape[1]):
data_cm[row, col, frame] = data[row, col, frame] - CM
print "frame: ", frame
return data_cm, all_CMs
कोई भी विचार?
चरण 2 में, आप अनिवार्य रूप से CM_tilde द्वारा treshold से ऊपर है कि किसी भी मूल्य की जगह है, और * तो * पूरी पंक्ति से अधिक मतलब की गणना, प्रतिस्थापित मान सहित? – Evert
अपने आंतरिक लूप को प्रतिस्थापित करने के लिए 'np.where' का उपयोग करके प्रारंभ करें। फिर, प्रसारण का उपयोग करके, आप बाहरी 2 loops को हटा सकते हैं। [जहां] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.where.html) के लिए प्रलेखन देखें – mtadd