如何将函数应用于 numpy 8 * 8 块?
How to apply functions to numpy 8 * 8 blocks?
现在我有 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])
需要很长时间迭代计算
您可以使用reshape
将数据的形状更改为(64, 8, 64, 8, 3)
。然后对两个length == 8轴应用dct()
:
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)
现在我有 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])
需要很长时间迭代计算
您可以使用reshape
将数据的形状更改为(64, 8, 64, 8, 3)
。然后对两个length == 8轴应用dct()
:
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)