【发布时间】:2019-10-19 14:40:26
【问题描述】:
我对重采样二维数组有疑问。
有时,地球科学数据的原始大小应转换为其他大小。如果每个轴的比率相等,则任务很简单,其中np.reshape 允许 100x100 到 50x50 的二维数组而不会丢失数据。代码显示为:
## creat a original data
xc1, xc2, yc1, yc2 = 100, 110, 35, 45
XSIZE,YSIZE=100,100
lon,lat = np.linspace(xc1,xc2,XSIZE),np.linspace(yc1,yc2,YSIZE)
pop = np.random.uniform(low=1000, high=50000, size=(XSIZE*YSIZE,)).reshape(YSIZE,XSIZE)
## reshape
shape = np.array(pop.shape, dtype=float)
coarseness = 2 # the new shape is in 50 x 50
new_shape = coarseness * np.ceil(shape/coarseness).astype(int)
zp_pop = np.zeros(new_shape)
zp_pop[:int(shape[0]), :int(shape[1])] = pop
temp = zp_pop.reshape((new_shape[0] // coarseness, coarseness,
new_shape[1] // coarseness, coarseness))
coarse_pop = np.sum(temp, axis=(1,3))
print (pop.sum())
print (coarse_pop.sum())
但是,当每个轴的粗调系数不同时,这种方法就不能实现了。我转而采用其他方法。这是我尝试使用 FFT 生成 60*80 数组作为输出的示例
from scipy import fftpack
pop_fft = fftpack.fft2(pop,shape = (60,80))
pop_res = fftpack.ifft2(pop_fft).real
print(pop.sum())
print(pop_res.sum())
254208134.8356425
122048754.13639387
数据丢失很严重。因此,我在这里发布了我的问题。也许我使用的重采样功能不正确。或者有一些更好的方法来处理这种情况。任何建议或 cmets 都非常感谢!
【问题讨论】:
-
为什么不像 100x100 -> 50x50 案例那样手动实现整形。唯一的区别是您是否必须分别处理每个轴。
标签: python arrays image gis fft