對於互相關例程我想採取一些二維矩陣(灰度圖像),旋轉一半90度,傅里葉變換他們全部。我交叉關聯了大量的幀,所以我試圖在過去成功使用的FFTW對象接口中使用pyFFTW。強制numpy陣列在物理上匹配stroping在內存
但是,這裏使用numpy.rot90()
我遇到了這樣的問題,numpy不是物理地旋轉內存中的數組,而是簡單地改變跨度,而FFTW需要物理內存中的數組實際旋轉。
# Import a 2k x 2k image
mage = my_image_import_function((2048,2048))
# mage striding is (16384,8)
temp = np.rot90(mage, k=-1)
# temp striding is (8, -16384)
temp2 = np.copy(temp)
# temp2 striding is (8, 16384)
mage2 = np.lib.stride_tricks.as_strided(temp2, (2048,2048), (16384,8))
# mage2 striding is (16384,8)
pyFFTWobj.update_arrays(mage2, mageFFT)
pyFFTWobj.execute()
採用.as_strided()
恢復原始跨步,以便它可以被送入pyFFTW。但是,在應用.as_strided()
函數後,mage2
不再相對於mage
旋轉。 .as_strided()
已經撤消了旋轉操作,所以上面的代碼什麼都不做。
程序員如何物理強制numpy數組匹配其跨步內存?
兩個原子的和Jaime的答案是正確的,原子的就地作品,而我得到的答案信貸海梅,因爲這是一個有點更加明確。 –