मेरे पास एक सरणी है और मैं 2x2 गैर-ओवरलैपिंग विंडो को स्कैन करके और अधिकतम प्राप्त करके एक छोटी सरणी बनाना चाहता हूं।विंडो में अधिकतम अधिकतम
import numpy as np
np.random.seed(123)
np.set_printoptions(linewidth=1000,precision=3)
arr = np.random.uniform(-1,1,(4,4))
res = np.zeros((2,2))
for i in xrange(res.shape[0]):
for j in xrange(res.shape[1]):
ii = i*2
jj = j*2
res[i][j] = max(arr[ii][jj],arr[ii+1][jj],arr[ii][jj+1],arr[ii+1][jj+1])
print arr
print res
तो इस तरह एक मैट्रिक्स:
[[ 0.393 -0.428 -0.546 0.103]
[ 0.439 -0.154 0.962 0.37 ]
[-0.038 -0.216 -0.314 0.458]
[-0.123 -0.881 -0.204 0.476]]
इस बन चाहिए: यहाँ एक उदाहरण है
[[ 0.439 0.962]
[-0.038 0.476]]
मैं कैसे और अधिक कुशलता से ऐसा कर सकते हैं?
क्या आप हमें दिखा सकते हैं कि आपने क्या प्रयास किया है और यह क्यों काम नहीं किया है? –
उपर्युक्त कोड आवश्यक नौकरी करता है, लेकिन इसे तेज़ होने की आवश्यकता है और इसलिए मैं लूप –
को निकालना चाहता हूं [NumBa] (http://numba.pydata.org/) का उपयोग करने पर विचार करें। आप अपनी डबल लूप को वैसे ही छोड़ सकते हैं, सजावट में लगभग 10 अक्षर जोड़ें, और इसके लिए सी-जैसे प्रदर्शन प्राप्त करें। यदि आप Continuum Analytics '["Anaconda"] (https://store.continuum.io/cshop/anaconda/) पायथन के वितरण के साथ काम करते हैं तो आउट ऑफ़ द बॉक्स का उपयोग करना आसान है। – ely