我正在尝试编写一个函数,该函数需要一个矩阵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