sho*_*ome 16 python arrays numpy
我正在尝试运行此代码,最后2个点产品显示错误,如标题中所示.我检查了矩阵的大小,两者都是(3,1),那么为什么在做dot产品时它会显示错误?
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))
Run Code Online (Sandbox Code Playgroud)
sho*_*ome 15
通过使用将矩阵转换为数组
n12 = np.squeeze(np.asarray(n2))
X12 = np.squeeze(np.asarray(x1))
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.
与需要匹配维度的标准算术不同,点积要求维度是以下之一:
(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可能不是一个好的选择。
小智 5
numpy.dot(a, b, out=None)
Run Code Online (Sandbox Code Playgroud)
两个数组的点积。
对于 N 维,它是 的最后一个轴a和 的倒数第二个轴的总和b。
文档:numpy.dot。
第一个矩阵的列和第二个矩阵的行应相等,并且顺序应仅这样
column of first matrix = row of second matrix
Run Code Online (Sandbox Code Playgroud)
并且不要按照以下步骤
row of first matrix = column of second matrix
Run Code Online (Sandbox Code Playgroud)
它将引发错误
| 归档时间: |
|
| 查看次数: |
57671 次 |
| 最近记录: |