簡體   English   中英

重塑numpy數組

[英]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 但我只能找到它來制作元組列表。

  • 獎勵:如果有更快的方法來實現這一點,請告訴我,我基本上需要為 3D 數據集中的每個體素計算 Hessian 矩陣的三個特征值。 計算 hessian 值非常快,但找到單個 2D 圖像切片的特征值大約需要 20 秒。 是否有用於圖像處理的 GPU 或張量流加速庫?

我們可以使用列表理解來獲得粗麻布 -

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM