重塑 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,但我只能找到它来制作元组列表。
- 奖金:如果有更快的方法来完成这个请告诉我,我基本上需要为 3D 数据集中的每个体素计算 hessian 矩阵的三个特征值.计算 hessian 值非常快,但找到单个 2D 图像切片的特征值大约需要 20 秒。是否有用于图像处理的 GPU 或张量流加速库?
我们可以使用列表推导来获取 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]
我想要做的是获取一个表示 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,但我只能找到它来制作元组列表。
- 奖金:如果有更快的方法来完成这个请告诉我,我基本上需要为 3D 数据集中的每个体素计算 hessian 矩阵的三个特征值.计算 hessian 值非常快,但找到单个 2D 图像切片的特征值大约需要 20 秒。是否有用于图像处理的 GPU 或张量流加速库?
我们可以使用列表推导来获取 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]