python定义三维数组不指定长度_插值/调整三维数组大小
ndimage.zoom
這可能是最好的方法,zoom method正是為這類任務(wù)而設(shè)計的。from scipy.ndimage import zoom
new_array = zoom(array, (0.5, 0.5, 2))
按指定的因子更改每個維度中的大小。如果數(shù)組的原始形狀是(40, 50, 60),那么新的數(shù)組將是(20, 25, 120)。
信號重采樣from scipy.signal import resample_poly
factors = [(1, 2), (1, 2), (2, 1)]
for k in range(3):
array = resample_poly(array, factors[k][0], factors[k][1], axis=k)
因子(必須是整數(shù))是上下采樣的。即:(1,2)是指尺寸除以2
(2,1)是指尺寸乘以2
(2,3)表示向上2,然后向下3,因此大小乘以2/3
可能的缺點是:這個過程在每個維度上都是獨(dú)立的,因此空間結(jié)構(gòu)可能不像ndimage方法那樣被考慮在內(nèi)。
RegularGridInterpolator
這是更實際的,但也更費(fèi)力,而且沒有過濾的好處:直接的下采樣。我們必須為插值程序創(chuàng)建一個網(wǎng)格,在每個方向使用原始步長。創(chuàng)建內(nèi)插器后,需要在新網(wǎng)格上對其求值;其調(diào)用方法采用不同的網(wǎng)格格式,使用mgrid準(zhǔn)備。values = np.random.randint(0, 256, size=(40, 50, 60)).astype(np.uint8) # example
steps = [0.5, 0.5, 2.0] # original step sizes
x, y, z = [steps[k] * np.arange(array.shape[k]) for k in range(3)] # original grid
f = RegularGridInterpolator((x, y, z), values) # interpolator
dx, dy, dz = 1.0, 1.0, 1.0 # new step sizes
new_grid = np.mgrid[0:x[-1]:dx, 0:y[-1]:dy, 0:z[-1]:dz] # new grid
new_grid = np.moveaxis(new_grid, (0, 1, 2, 3), (3, 0, 1, 2)) # reorder axes for evaluation
new_values = f(new_grid)
缺點:例如,當(dāng)一個維度減少2時,它實際上會每隔一個值下降一次,這就是簡單的下采樣。理想情況下,在這種情況下,應(yīng)該平均相鄰值。在信號處理方面,在{a5}中,低通濾波先于下采樣。
總結(jié)
以上是生活随笔為你收集整理的python定义三维数组不指定长度_插值/调整三维数组大小的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java指定sql生成xml_SQL S
- 下一篇: linux常用调试,linux下gdb常