python多维矩阵基础运算中的一点困惑

ps 还是deeplung的代码,心情烦躁连测试都麻烦啊!!

遇到的问题简单来说就是当多维矩阵运算时候,脑袋不够用了想像不过来。

1.一个(72, 72, 108, 3, 5)矩阵A ,用12个(36,36, 36, 3, 5)矩阵B[0]到B[11]替换,B是一个矩阵列表。这个还比较好理解。

        for iz in range(2):
            for ih in range(2):
                for iw in range(3):
                    sz = iz * 36
                    ez = (iz + 1) * 36
                    sh = ih * 36
                    eh = (ih + 1) * 36
                    sw = iw * 36
                    ew = (iw + 1) * 36
                    ii=iz*(2*3)+ih*3+iw
                    A[sz:ez, sh:eh, sw:ew] = B[ii]

2.比较难的是(72, 1, 1, 1)矩阵A,(72, 72, 108, 3)矩阵B,(1,1,1,3)矩阵C。

然后代码中有一段A+B*C的操作这里面的是矩阵对应位置相乘和相加的操作,而不是(1,3)×(3,1)=(1,1)这样的操作。具体发生了什么我们可以用以下代码来看看。

import numpy as np
c = -1 * np.ones((2, 2, 2, 3))
b = -1 * np.ones((1, 1, 1, 3))
e = np.arange(5,16,5)
f=e.reshape((1, 1, 1, -1))
h = np.ones((2,1,1,1))
print(f.shape)
d=c*b
g=c*f+h
print(d)
print(g)
(1, 1, 1, 3)
[[[[1. 1. 1.]
   [1. 1. 1.]]

  [[1. 1. 1.]
   [1. 1. 1.]]]


 [[[1. 1. 1.]
   [1. 1. 1.]]

  [[1. 1. 1.]
   [1. 1. 1.]]]]
[[[[ -4.  -9. -14.]
   [ -4.  -9. -14.]]

  [[ -4.  -9. -14.]
   [ -4.  -9. -14.]]]


 [[[ -4.  -9. -14.]
   [ -4.  -9. -14.]]

  [[ -4.  -9. -14.]
   [ -4.  -9. -14.]]]]

从最后的结果回推出简单可表述为B*C就是先将B看成72×72×108个 长度为3的数组,而C就是1×1*1个长度为3的数组,B的每个数组与C的那个数组对应位置相乘,再还原回去(72,72,108,3)即可。

而A+B*C就是类似,首先将B*C看成72×108×3个长度为72的数组,而A就是1×1*1个长度为72的数组,B*C的每个数组与A的那个数组对应位置相乘,在还原回去(72,72,108,3)即可。

总结,涉及到多维矩阵时候一定不要惊慌。其实不要将他们看的很复杂处理它们其实跟处理低维矩阵是一样的。比如A为(2,2,3,4)的矩阵,直接很难想象,你可一看成是2个(2,3,4)的矩阵按照一定顺序拼凑起来的,也可以看成是4个(2,2,3)矩阵按照一定顺序拼凑起来的。当然你还可以看成是2*3*4个长度为2的数组按照一定顺序拼凑起来的。

多维矩阵也就那样,希望这篇博客对你有所帮助.

你可能感兴趣的:(深度学习)