Nếu tôi có một mảng như thế này:Giảm độ phân giải của mảng thông qua tổng
a = np.array([[ 1, 2, 3, 4],
[ 5 ,6, 7, 8],
[ 9,10,11,12],
[13,14,15,16]])
Tôi muốn 'thay đổi độ phân giải', và kết thúc với một mảng nhỏ hơn, (nói 2 hàng bởi 2 màu sắc, hoặc 2 hàng bởi 4 cols, v.v.). Tôi muốn thay đổi độ phân giải này xảy ra thông qua tổng kết. Tôi cần điều này để làm việc với mảng lớn, số lượng hàng, cols của mảng nhỏ hơn sẽ luôn là một yếu tố của mảng lớn hơn.
Giảm mảng trên để 2 của 2 mảng sẽ cho kết quả (đó là những gì tôi muốn):
[[ 14. 22.]
[ 46. 54.]]
tôi có chức năng này mà hiện nó tốt:
import numpy as np
def shrink(data, rows, cols):
shrunk = np.zeros((rows,cols))
for i in xrange(0,rows):
for j in xrange(0,cols):
row_sp = data.shape[0]/rows
col_sp = data.shape[1]/cols
zz = data[i*row_sp : i*row_sp + row_sp, j*col_sp : j*col_sp + col_sp]
shrunk[i,j] = np.sum(zz)
return shrunk
print shrink(a,2,2)
print shrink(a,2,1)
#correct output:
[[ 14. 22.]
[ 46. 54.]]
[[ 36.]
[ 100.]]
tôi đã có một cái nhìn dài qua các examples, nhưng dường như không thể tìm thấy bất cứ điều gì giúp.
Có cách nào nhanh hơn để thực hiện việc này mà không cần các vòng lặp không?
Nếu nó hoạt động tốt, câu hỏi của bạn là gì? –
@Niek de Klein - chỉnh sửa để làm rõ. Tôi là một phương pháp nhanh hơn để làm điều này. – fraxel
Những người muốn làm loại công cụ này có khuynh hướng sử dụng mô-đun 'itertools', có thể đáng xem. – heltonbiker