如何将3D矩阵/卷拆分为固定大小的子卷,然后在python中重新合并?
如何将3D numpy阵列拆分为固定大小的3D子阵列,对子阵列执行一些操作,最后以相同的顺序将其放回以创建原始的大3D体积 e、 g.大容量为nxm如何将3D矩阵/卷拆分为固定大小的子卷,然后在python中重新合并?,python,numpy,matrix,split,Python,Numpy,Matrix,Split,如何将3D numpy阵列拆分为固定大小的3D子阵列,对子阵列执行一些操作,最后以相同的顺序将其放回以创建原始的大3D体积 e、 g.大容量为nxm 因此,我想将其拆分为k x k x k的子卷,并对每个子卷进行一些操作,然后将它们重新组合在一起,以创建NXM。一个简单的解决方案是使用嵌套for循环处理阵列: A = np.random.rand(5, 4) print "A:", A step = 2 newHeight = np.ceil(float(A.shape[0]) / step)
因此,我想将其拆分为k x k x k的子卷,并对每个子卷进行一些操作,然后将它们重新组合在一起,以创建NXM。一个简单的解决方案是使用嵌套for循环处理阵列:
A = np.random.rand(5, 4)
print "A:", A
step = 2
newHeight = np.ceil(float(A.shape[0]) / step)
newWidth = np.ceil(float(A.shape[1]) / step)
B = np.zeros((newHeight, newWidth))
C = np.zeros(A.shape)
for i in range(B.shape[0]):
for j in range(B.shape[1]):
B[i, j] = np.mean(A[i*step:(i+1)*step, j*step:(j+1)*step])
C[i*step:(i+1)*step, j*step:(j+1)*step] = B[i, j]
print "B:", B
print "C:", C
输出:
A: [[ 0.86754517 0.65107995 0.01074822 0.18394825]
[ 0.03184878 0.07052286 0.44014168 0.84913463]
[ 0.2982024 0.94988568 0.33208104 0.28697172]
[ 0.36721371 0.9352932 0.22780242 0.13650031]
[ 0.84073176 0.33792535 0.53240018 0.54008341]]
B: [[ 0.40524919 0.37099319]
[ 0.63764875 0.24583887]
[ 0.58932856 0.53624179]]
C: [[ 0.40524919 0.40524919 0.37099319 0.37099319]
[ 0.40524919 0.40524919 0.37099319 0.37099319]
[ 0.63764875 0.63764875 0.24583887 0.24583887]
[ 0.63764875 0.63764875 0.24583887 0.24583887]
[ 0.58932856 0.58932856 0.53624179 0.53624179]]
A是大型输入数组
B是小输出阵列
C是大型输出阵列
步骤是每个块的大小,在您的情况下为20
newHeight和newWidth是B的计算大小:将A的大小除以窗口大小步长并向上取整
i*step:i+1*step和j*step:j+1*step分别是A和C中每个块的垂直和水平范围。
我使用了一个5x4的小数组以及二维数组,只是为了简单易读的示例结果。将这种方法扩展到三维应该不难。这太模糊了。您希望如何运送这些物品?你想用它们做什么?你尝试了什么?这毕竟不是一个免费的编码服务。对不起,我对python还很陌生。我的意思是简单的处理,例如对每个小卷应用一个过滤器,然后将它们放在一起。因此,基本上,它是将卷拆分为更小的卷,然后反向拆分以获得相同的原始大卷。这是一个未优化的示例。看起来你需要一个基本的Python/numpy教程,问题不是这样。谢谢,但我想拆分成较小的窗口,然后将较小的窗口放回原处,例如,在你的情况下,再次设置为5x4。例如,A是原始的5x4,B是所有较小的非重叠2x2块,C也是5x4。我们这里缺少C,它是2x2的浓度blocks@StackOverflower:好的,我添加了一个输出数组C。