我有一個3D numpy數組。我想通過沿着一個軸在連續的2D切片上執行一個函數來形成一個新的3D數組,並且將結果切片堆疊在一起。顯然有很多方法可以做到這一點;我想盡可能以最簡潔的方式做到這一點。我認爲這將可能與numpy.vectorize
,但這似乎產生一個函數,迭代我的數組中的每個值,而不是通過沿第一軸移動的2D切片。連續2D切片上的Numpy矢量化函數
基本上,我想要的代碼看起來是這樣的:
new3dmat = np.vectorize(func2dmat)(my3dmat)
,並完成同樣的事情,這樣的:
new3dmat = np.empty_like(my3dmat)
for i in range(my3dmat.shape[0]):
new3dmat[i] = func2dmat(my3dmat[i])
我怎樣才能做到這一點?
你不能重寫你的'func2dmat'來操作整個3D陣列嗎? YMMV,但tHat通常是這種矢量化的最佳途徑。 – Jaime
我可以這樣做,但循環解決方案更可取。我希望能夠對一個複合數據結構(3d矩陣)進行簡潔的操作,並使用一個可以對其成分(二維矩陣)進行操作的函數 - 而且這個函數不需要知道這些成分來自哪個大結構。這樣我只需要一個函數,而不是每個包含2d矩陣的可能結構的特殊函數。 –
您需要一個GUFUNC,例如['np.linalg.det'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.det.html)......這個慣例是讓你的函數在每個2D上運行數組放在輸入的最後2個維上。如果你能寫出快速的矢量化代碼,那麼讓它在其他軸上工作只是明智地使用['np.rollaxis']的問題(http://docs.scipy.org/doc/numpy/reference/generated/ numpy.rollaxis.html)等。如果你想充分利用numpy,Python循環解決方案几乎不可取。 – Jaime