[英]Reshaping numpy array
我想要做的是取一個表示 3D 圖像數據的 numpy 數組並計算每個體素的 Hessian 矩陣。 我的輸入是一個形狀矩陣 (Z,X,Y),我可以輕松地沿 z 切取一個切片並檢索單個原始圖像。
gx, gy, gz = np.gradient(imgs)
gxx, gxy, gxz = np.gradient(gx)
gyx, gyy, gyz = np.gradient(gy)
gzx, gzy, gzz = np.gradient(gz)
我可以按如下方式訪問單個體素的粗麻布:
x = 100
y = 100
z = 63
H = [[gxx[z][x][y], gxy[z][x][y], gxz[z][x][y]],
[gyx[z][x][y], gyy[z][x][y], gyz[z][x][y]],
[gzx[z][x][y], gzy[z][x][y], gzz[z][x][y]]]
但這很麻煩,我無法輕松切片數據。
我曾嘗試使用重塑如下
H = H.reshape(Z, X, Y, 3, 3)
但是當我通過檢索特定體素的粗麻布來測試這個時,從重塑數組返回的值與原始數組完全不同。
我想我可以以某種方式使用 zip 但我只能找到它來制作元組列表。
我們可以使用列表理解來獲得粗麻布 -
H_all = np.array([np.gradient(i) for i in np.gradient(imgs)]).transpose(2,3,4,0,1)
只是給它一點解釋: [np.gradient(i) for i in np.gradient(imgs)]
循環遍歷np.gradient
調用的兩個輸出級別,從而產生(3 x 3)
形狀的張量外面的兩個軸。 我們需要這兩個作為最終輸出中的最后兩個軸。 所以,我們在最后用轉置來推動那些。
因此, H_all
擁有所有的 hessian ,因此我們可以提取我們特定的 hessian 給定x,y,z
,就像這樣 -
x = 100
y = 100
z = 63
H = H_all[z,y,x]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.