Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将3D矩阵/卷拆分为固定大小的子卷,然后在python中重新合并?_Python_Numpy_Matrix_Split - Fatal编程技术网

如何将3D矩阵/卷拆分为固定大小的子卷,然后在python中重新合并?

如何将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)

如何将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)
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。