在3D数据立方体上进行一维插值优化

时间:2020-07-28 09:48:40

标签: python python-3.x scipy interpolation data-cube

我想在Python中的3D数据立方体上进行1D插值。我有18张在基准波长下拍摄的图像。我想对每个像素进行一维插值,以形成针对给定特定波长的185个新图像。我的问题是优化问题。我已经看过scipy.ndimage.map_coordinates之类的技巧,但是我认为这不能应用于我的问题,也无法将其作为优化的解决方案。真正的问题是我的数据大小:我正在使用(18x1024x1024)数据多维数据集,并希望输出大小为(185x1024x1024)的新数据多维数据集。有没有一种方法可以优化以下代码?

import numpy as np
from scipy.interpolate import interp1d

cube_software = np.zeros((18,1024,1024))


lambda_instrument = np.linspace(2,13,185)
lambda_software   = np.linspace(2,13,18)

cube_new = np.zeros((185,1024,1024))

for r in range(np.shape(cube_software)[1]):
    # print('Number %i over %i'%(r,np.shape(cube_software)[1]))
    for u in range(np.shape(cube_software)[2]):
        pixel_inter = interp1d(lambda_software,cube_software[:,r,u])
        cube_new[:,r,u] = pixel_inter(lambda_instrument) 

1 个答案:

答案 0 :(得分:0)

我找到了避免两个for循环的方法,我直接使用了线性插值的公式并将其用于矩阵。

例如,如果我有18种不同波长的原始数据,然后有一个大小为data_cube的称为18x1024x1024的数据立方体,并且我想估算k-th波长的图像lambda_k位于原始数据立方体的index_before=15的{​​{1}}和W_i index_before=16的波长之间,然后:

W_j

计算是瞬时的,希望对您有所帮助。