Python 显示值错误:形状(1,3)和(1,3)未对齐:3(尺寸1)!=1(尺寸0)

Python 显示值错误:形状(1,3)和(1,3)未对齐:3(尺寸1)!=1(尺寸0),python,arrays,numpy,Python,Arrays,Numpy,我试图使用以下矩阵并执行代码中所示的点积。我检查了矩阵的大小,所有的矩阵都是(3,1),但最后两个点积会给我带来错误 coordinate1 = [-7.173, -2.314, 2.811] coordinate2 = [-5.204, -3.598, 3.323] coordinate3 = [-3.922, -3.881, 4.044] coordinate4 = [-2.734, -3.794, 3.085] import numpy as np from numpy imp

我试图使用以下矩阵并执行代码中所示的点积。我检查了矩阵的大小,所有的矩阵都是(3,1),但最后两个点积会给我带来错误

coordinate1 = [-7.173, -2.314, 2.811] 
coordinate2 = [-5.204, -3.598, 3.323] 
coordinate3 = [-3.922, -3.881, 4.044] 
coordinate4 = [-2.734, -3.794, 3.085] 

import numpy as np 
from numpy import matrix
coordinate1i=matrix(coordinate1)
coordinate2i=matrix(coordinate2)
coordinate3i=matrix(coordinate3)
coordinate4i=matrix(coordinate4)

b0 = coordinate1i - coordinate2i
b1 = coordinate3i - coordinate2i
b2 = coordinate4i - coordinate3i

n1 = np.cross(b0, b1)
n2 = np.cross(b2, b1)

n12cross = np.cross(n1,n2)
x1= np.cross(n1,b1)/np.linalg.norm(b1)
print np.shape(x1)
print np.shape(n2)
np.asarray(x1)
np.asarray(n2)

y = np.dot(x1,n2)
x = np.dot(n1,n2)

return np.degrees(np.arctan2(y, x))

通过使用将矩阵转换为数组

n12 = np.squeeze(np.asarray(n2))

X12 = np.squeeze(np.asarray(x1))

解决了该问题。

与标准算法不同,标准算法要求匹配尺寸,dot产品要求尺寸为以下尺寸之一:

  • (X…,A,B)点(Y…,B,C)->(X…,Y…,A,C)
    ,其中
    表示“0个或更多不同的值”
  • (B,)点(B,C)->(C,)
  • (A,B)点(B,)->(A,)
  • (B,)点(B,)->(
你的问题是你正在使用
np.matrix
,这在你的代码中是完全不必要的,
np.matrix
的主要目的是将
a*b
转换成
np.dot(a,b)
。一般来说,
np.matrix
可能不是一个好的选择

numpy.dot(a, b, out=None)
两个阵列的点积

对于N维,它是
a
最后一个轴与
b
倒数第二个轴的和积


文档:.

第一个矩阵的列和第二个矩阵的行应该相等,并且顺序应该是这样的

column of first matrix = row of second matrix
并且不要执行以下步骤

row of first matrix  = column of second matrix

它将抛出一个错误

愚蠢的问题-您的解决方案在原始代码中的位置如何?