我正在嘗試編寫一個函數,該函數需要一個矩陣A,然後將其偏移一個,然後在共享區域上執行元素明智的矩陣乘法。也許一個例子會有所幫助。假設我有矩陣:有效地將矩陣與自身相乘,然後將其抵消一個numpy
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
什麼我想返回的是: (1 * 2)+(4 * 5)+(7 * 8)= 78
下面的代碼做它但inefficently:
import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
Height = A.shape[0]
Width = A.shape[1]
Sum1 = 0
for y in range(0, Height):
for x in range(0,Width-2):
Sum1 = Sum1 + \
A.item(y,x)*A.item(y,x+1)
print("%d * %d"%(A.item(y,x),A.item(y,x+1)))
print(Sum1)
隨着輸出:
1 * 2
4 * 5
7 * 8
78
這是我嘗試寫的代碼更efficentl y with numpy:
import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(np.sum(np.multiply(A[:,0:-1], A[:,1:])))
不幸的是,這一次我得到了186個。我不知道該怎麼去錯了。我喜歡有人來糾正我或提供另一種方式來實現這一點。
謝謝。
您需要提供更準確的描述。爲什麼你的操作不會對'A'的最後一列做任何事情?這是如何「在共享區域上元素明智的矩陣乘法」? – user2357112
'np.dot(A [:,0],A [:,1])'返回'78'。 – Psidom
IIUC您需要沿第一個軸使用求和:'np.sum(np.multiply(A [:,0:-1],A [:,1:]),axis = 0)'。使用'default np.sum()',它將所有內容總結爲一個標量。 – Divakar