如何将函数应用于numpy 8 * 8块?

时间:2016-02-21 09:50:34

标签: python numpy dct

现在我有512 * 512 * 3 numpy数组,我想对每个8 * 8块应用一个函数,例如,dct转换,是否有任何built_in模块可以做到这一点?我试图以天真的方式实现它

for c in xrange(3):
    for x in xrange(0, 512, 8):
        for y in xrange(0, 512, 8):
            img[x:x + 8, y:y + 8, c] = dct_2d(img[x:x + 8, y:y + 8, c])
            img[x:x + 8, y:y + 8, c] = idct_2d(img[x:x + 8, y:y + 8, c])

这需要很长时间来迭代和计算。

1 个答案:

答案 0 :(得分:5)

您可以使用reshape将数据形状更改为(64, 8, 64, 8, 3)。然后将dct()应用于两个长度== 8轴:

from scipy.fftpack import dct
import numpy as np

a = np.random.rand(512, 512, 3)

b = a.reshape(64, 8, 64, 8, 3)

res = dct(dct(b, axis=1), axis=3)