python多維矩陣基礎運算中的一點困惑

2021-09-10 08:19:19 字數 1738 閱讀 9205

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 ...