2016-09-21 39 views
5

我试图运行此代码,并且最后2点产品显示错误如标题所示。我检查了矩阵的大小,两者都是(3,1),那么为什么它会在做点积时向我显示错误?显示ValueError:形状(1,3)和(1,3)未对齐:3(dim 1)!= 1(dim 0)

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

回答

7

通过使用

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

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

矩阵转换为阵列解决的问题。

3

不同于标准算术,其期望匹配的尺寸,点积需要的尺寸之一:

  • (X..., A, B) dot (Y..., B, C) -> (X..., Y..., A, C),其中...表示“0或更多个不同的值
  • (B,) dot (B, C) -> (C,)
  • (A, B) dot (B,) -> (A,)
  • (B,) dot (B,) ->()

您的问题是您使用的是np.matrix,这在您的代码中完全没有必要 - np.matrix的主要用途是将a * b转换为np.dot(a, b)。一般来说,np.matrix可能不是一个好的选择。

0
numpy.dot(a, b, out=None) 

两个阵列的点积。

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

文档:numpy.dot

4

所述第一矩阵和所述第二矩阵的行的列应是相等,顺序应该是这样的仅

column of first matrix = row of second matrix 

和不遵循以下步骤

row of first matrix = column of second matrix 

它会抛出一个错误

相关问题