如何使用Sympy进行向量的点/交叉乘法

Van*_*nen 8 python math sympy

我想知道怎么做

  • 点乘法
  • 交叉乘法
  • 加/减

与sympy库的载体.我试过查看官方文档,但我没有运气或者太复杂了.任何人都可以帮我解决这个问题吗?

我试图做这个简单的操作

a · b = |a| × |b| × cos(?)
Run Code Online (Sandbox Code Playgroud)

Car*_*orc 6

如果你有符号向量并且需要使用sympy它其实很简单,只需使用cross如下示例的函数即可:

import sympy as s
a,b,c,x,y,z = s.symbols("a,b,c,x,y,z")
v1 = s.Matrix([a,b,c])
v2 = s.Matrix([x,y,z])
cross_result = v1.cross(v2)
print(cross_result)
Run Code Online (Sandbox Code Playgroud)

带输出:

Matrix([
[ b*z - c*y],
[-a*z + c*x],
[ a*y - b*x]])
Run Code Online (Sandbox Code Playgroud)


Kep*_*ler 5

您可以按照此处所述进行操作: https: //docs.sympy.org/latest/modules/matrices/matrices.html ?highlight=cross#sympy.matrices.matrices.MatrixBase.cross

例如:

>>> from sympy import Matrix
>>> M = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> v = Matrix([1, 1, 1])
>>> M.row(0).dot(v)
6
>>> M.col(0).dot(v)
12
>>> v = [3, 2, 1]
>>> M.row(0).dot(v)
10
Run Code Online (Sandbox Code Playgroud)


zha*_*hen 2

numpy就是为此而设计的,它是一种干净而快速的数值计算方法,因为它是用 C 实现的。

In [36]: x = [1, 2, 3]
    ...: y = [4, 5, 6]

In [37]: import numpy as np
    ...: print np.dot(x, y)
    ...: print np.cross(x, y)
    ...: print np.add(x, y) #np.subtract, etc.
32
[-3  6 -3]
[5 7 9]
Run Code Online (Sandbox Code Playgroud)

google groups上有关于numpy和sympy的讨论

  • 我怀疑他们是 SymPy 开发者。如果您只进行数字处理,我们大多数人都会将您从 SymPy 转为 NumPy。如果您想要精确的象征性答案,则应使用 SymPy。 (2认同)
  • @Vannen 狂热分子?您询问如何在 SymPy 中执行这些操作,所以这个答案根本不合适。当你真的想用 SymPy 进行交叉乘积时,偶然发现这样的答案是非常烦人的。 (2认同)