3D 数据立方体上的 1D 插值优化
1D interpolation optimization on 3D data cube
我想在 Python 中的 3D 数据立方体上进行一维插值。我有 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)
我找到了避免这两个 for 循环的方法,我直接使用线性插值的公式并将其改编为矩阵。
例如,如果我有 18 个不同波长的原始数据,然后是一个名为 data_cube
的数据立方体,大小为 18x1024x1024
,我想估计 k-th
处的图像] 波长 lambda_k
位于 index_before=15
的波长 W_i
和 index_before=16
W_j
我的原始数据立方体之间然后:
new_cube[k,:,:]=data_cube[index_before,:,:] + (data_cube[index_after,:,:]-data_cube[index_before,:,:]) / (W_j-W_i) * (W_k-W_i)
并且计算是瞬时的,希望这对您有所帮助。
我想在 Python 中的 3D 数据立方体上进行一维插值。我有 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)
我找到了避免这两个 for 循环的方法,我直接使用线性插值的公式并将其改编为矩阵。
例如,如果我有 18 个不同波长的原始数据,然后是一个名为 data_cube
的数据立方体,大小为 18x1024x1024
,我想估计 k-th
处的图像] 波长 lambda_k
位于 index_before=15
的波长 W_i
和 index_before=16
W_j
我的原始数据立方体之间然后:
new_cube[k,:,:]=data_cube[index_before,:,:] + (data_cube[index_after,:,:]-data_cube[index_before,:,:]) / (W_j-W_i) * (W_k-W_i)
并且计算是瞬时的,希望这对您有所帮助。