重塑 numpy 数组

Reshaping numpy array

我想要做的是获取一个表示 3D 图像数据的 numpy 数组,并计算每个体素的粗麻布矩阵。我的输入是一个形状为 (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,但我只能找到它来制作元组列表。

我们可以使用列表推导来获取 hessians -

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 包含所有粗麻布,因此我们可以提取给定 x,y,z 的特定粗麻布,就像这样 -

x = 100
y = 100
z = 63
H = H_all[z,y,x]