繁体   English   中英

显示 ValueError:形状 (1,3) 和 (1,3) 未对齐:3 (dim 1) != 1 (dim 0)

[英]Showing ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

我正在尝试使用以下矩阵并执行代码中所示的点积。 我检查了矩阵的大小,所有矩阵都是 (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))

解决了这个问题。

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

column of first matrix = row of second matrix

并且不要按照下面的步骤

row of first matrix  = column of second matrix

它会抛出一个错误

与需要匹配维度的标准算术不同,点积要求维度是以下之一:

  • (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可能不是一个好的选择。

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

两个数组的点积。

对于N维它结束的最后一个轴线的和积a和第二到最后的b

文档: numpy.dot

@Evgeny

n12 = np.squeeze(np.asarray(n2))
X12 = np.squeeze(np.asarray(x1))
# replaced dot products
y = np.dot(X12,n12)
x = np.dot(n1,n12)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM