我有一個形狀(50,8,2048,256)的四維陣列data
這是50組包含8個2048x256像素圖像的組。 times
是一個形狀(50,8)的數組,給出每個圖像拍攝的時間。優化4D Numpy陣列構建
我計算一個一階多項式擬合在每個像素的每個組中的所有圖像,給我一個形狀的數組(50,2048,256,2)。這實際上是50個組中每個組的矢量圖。我用來存儲多項式的代碼是:
fits = np.ones((50,2048,256,2))
times = times.reshape(50,8,1).repeat(2048,2).reshape(50,8,2048,1).repeat(256,3)
for group in range(50):
for xpos in range(2048):
for ypos in range(256):
px_data = data[:,:,ypos,xpos]
fits[group,ypos,xpos,:] = np.polyfit(times[group,:,ypos,xpos],data[group,:,ypos,xpos],1)
現在的挑戰是,我想以產生陣列形狀的new_data
(50,12,2048,256)其中,I使用的多項式係數從fits
和時間從new_time
生成50組12個圖像。
我想我可以使用像np.polyval(fits, new_time)
這樣的東西來生成圖像,但我很困惑如何對它進行描述。它應該是這樣的:
new_data = np.ones((50,12,2048,256))
for i,(times,fit) in enumerate(zip(new_times,fits)):
new_data[i] = np.polyval(fit,times)
但我得到廣播錯誤。任何援助將不勝感激!
更新 好了,我改變了代碼一點,這樣它的工作,我希望做的事情,但它與所有這些循環(〜每組字義1 minute此會帶我幾乎非常緩慢一個小時跑!)。任何人都可以提出一種方法來優化它來加速它?
# Generate the polynomials for each pixel in each group
fits = np.ones((50,2048,256,2))
times = np.arange(0,50*8*grptme,grptme).reshape(50,8)
times = times.reshape(50,8,1).repeat(2048,2).reshape(50,8,2048,1).repeat(256,3)
for group in range(50):
for xpos in range(2048):
for ypos in range(256):
fits[group,xpos,ypos] = np.polyfit(times[group,:,xpos,ypos],data[group,:,xpos,ypos],1)
# Create new array of 12 images per group using the polynomials for each pixel
new_data = np.ones((50,12,2048,256))
times = np.arange(0,50*12*grptme,grptme).reshape(50,12)
times = times.reshape(50,12,1).repeat(2048,2).reshape(50,12,2048,1).repeat(256,3)
for group in range(50):
for img in range(12):
for xpos in range(2048):
for ypos in range(256):
new_data[group,img,xpos,ypos] = np.polynomial.polynomial.polyval(times[group,img,xpos,ypos],fits[group,xpos,ypos])
看起來像適合度和時間都將是多維數組,但'numpy.polyval'的文檔表明它想要一維數組。你可以看看'numpy.polynomial.polynomial.polyval'(文檔[here](http://docs.scipy。org/doc/numpy/reference/generated/numpy.polynomial.polynomial.polyval.html#numpy.polynomial.polynomial.polyval)) – Ajean
@Ajean是的,看起來像正確的功能使用,謝謝!但有關如何將其應用於數據集的建議?我想使用組的多項式係數在每個組中生成12個圖像(50,12,2048,256)。 –