Tôi có một mảng và tôi muốn tạo ra một mảng nhỏ hơn bằng cách quét một cửa sổ không chồng chéo 2x2 và nhận được tối đa. Dưới đây là một ví dụ:Cửa sổ tối đa ở mức tối đa
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
Vì vậy, một ma trận như thế này:
[[ 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]]
nên trở thành này:
[[ 0.439 0.962]
[-0.038 0.476]]
Làm thế nào tôi có thể làm điều này một cách hiệu quả hơn?
Bạn có thể cho chúng tôi biết những gì bạn đã thử và tại sao nó không hoạt động? –
mã ở trên thực hiện công việc cần thiết, nhưng điều này cần phải nhanh chóng và do đó tôi muốn loại bỏ vòng lặp cho –
Cân nhắc sử dụng [NumBa] (http://numba.pydata.org/). Bạn có thể để vòng lặp đôi của bạn giống như nó, thêm khoảng 10 ký tự trong một trang trí và có được hiệu suất giống như C cho việc này. Dễ sử dụng out-of-the-box nếu bạn làm việc với Continuum Analytics ["Anaconda"] (https://store.continuum.io/cshop/anaconda/) phân phối của Python. – ely