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的陣列按照一定順序拼湊起來的。
多維矩陣也就那樣,希望這篇部落格對你有所幫助.
python中的矩陣運算
numpy scipy sympy 搬運 python矩陣的運算大全 python矩陣運算可以用numpy模組,也可以用scipy模組,主要運算包括以下幾種 import numpy as np import matplotlib.pyplot as plt import scipy.linalg ...
Python中矩陣建立和矩陣運算
矩陣建立和矩陣運算 矩陣建立 1 from numpy import a1 array 1,2,3 a2 mat a1 矩陣與方塊列表的區別如下 建立乙個2 4的1矩陣,預設是浮點型的資料,如果需要時int型別,可以使用dtype int 3 data5 mat random.randint 2,8...
OpenCV基礎知識 多維矩陣
多維矩陣的結構分析 例子 include cv.h include highgui.h include include include void main cvma mynd cvcreatema 3,size,cv 8sc1 printf 1 size d step d n mynd dim 0 ...