Python ValueError:形状(1,1)和(4,1)未对齐:1(尺寸1)!=4(尺寸0)

Python ValueError:形状(1,1)和(4,1)未对齐:1(尺寸1)!=4(尺寸0),python,matrix,Python,Matrix,所以我试图实现(a*b)*(M*a.T),但我一直得到一个错误。由于我对python和numpy函数还不熟悉,所以帮助将非常大。提前谢谢 import numpy.matlib import numpy as np def complicated_matrix_function(M, a, b): ans1 = np.dot(a, b) ans2 = np.dot(M, a.T) out = np.dot(ans1, ans2) return out

所以我试图实现(a*b)*(M*a.T),但我一直得到一个错误。由于我对python和numpy函数还不熟悉,所以帮助将非常大。提前谢谢

import numpy.matlib
import numpy as np



def complicated_matrix_function(M, a, b):

    ans1 = np.dot(a, b)
    ans2 = np.dot(M, a.T)
    out = np.dot(ans1, ans2)

    return out

M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
a = np.array([[1, 1, 0]])
b = np.array([[-1], [2], [5]])

ans = complicated_matrix_function(M, a, b)

print(ans)
print()
print("The size is: ", ans.shape)
错误消息是:

ValueError:形状(1,1)和(4,1)未对齐:1(尺寸1)!=4(尺寸0)


错误消息告诉您,
numpy.dot
不知道如何处理(1x1)矩阵和(4x1)矩阵。然而,因为在你的公式中,你只说你想要相乘,我假设,你只想将标量积(a,b)中的标量与矩阵向量积(M.a)中的向量相乘。为此,只需在python中使用
*

你的例子是:

import numpy.matlib
将numpy作为np导入
def复杂矩阵函数(M、a、b):
ans1=np.点(a,b)
ans2=np.点(M,a.T)
out=ans1*ans2
返回
M=np.数组([[1,2,3],[4,5,6],[7,8,9],[10,11,12])
a=np.array([[1,1,0]])
b=np.数组([-1]、[2]、[5]])
ans=复杂矩阵函数(M,a,b)
打印(ans)
打印()
打印(“大小为:”,ans.shape)
导致

[[ 3]
 [ 9]
 [15]
 [21]]

The size is:  (4, 1)
[ 3  9 15 21]

The size is:  (4,)
注意

请注意,
numpy.dot
将进行大量的
解释
,以确定您想要做什么。因此,如果您不需要结果的大小(4,1),可以将所有内容简化为:

import numpy.matlib
将numpy作为np导入
def复杂矩阵函数(M、a、b):
ans1=np.点(a,b)
ans2=np.dot(M,a)#无需转置
out=ans1*ans2
返回
M=np.数组([[1,2,3],[4,5,6],[7,8,9],[10,11,12])
a=np.array([1,1,0])#不需要额外的[]
b=np.数组([-1,2,5])#不需要额外的[]
ans=复杂矩阵函数(M,a,b)
打印(ans)
打印()
打印(“大小为:”,ans.shape)
导致

[[ 3]
 [ 9]
 [15]
 [21]]

The size is:  (4, 1)
[ 3  9 15 21]

The size is:  (4,)

感谢您快速明确的回复!欢迎收看StackOverflow。如果这解决了您的问题,您可以将其标记为这样,以便其他人知道此问题已解决。如果你认为这是一个好答案,你也可以投赞成票。