python numpy矢量数学

nin*_*key 14 python numpy

什么是2d矢量类/操作的numpy等价物euclid?(如:euclid.Vector2)

到目前为止,我有这个.创建两个向量

import numpy as np

loc = np.array([100., 100.])
vel = np.array([30., 10])

loc += vel

# reseting speed to a default value, maintaining direction
vel.normalize()
vel *= 200

loc += vel
Run Code Online (Sandbox Code Playgroud)

Rol*_*ith 30

你可以使用numpy数组.查看matlab用户页面的numpy,详细了解数组矩阵的优缺点.

正如我在评论中提到的那样,必须使用dot()函数或方法来进行向量的复制是最大的缺陷.但话说回来,numpy数组是一致的.所有操作都是按元素进行的.因此,使用标量添加或减去数组和乘法都可以像向量一样工作.

Edit2:从Python 3.5和numpy 1.10开始,你可以使用@infix-operator进行矩阵乘法,这要归功于pep 465.

编辑:关于你的评论:

  1. 是.整个numpy基于数组.

  2. 是.linalg.norm(v)获取向量的长度是一个很好的方法.但是你得到的东西取决于规范可能的第二个论点!阅读文档.

  3. 要标准化矢量,只需将其除以(2)中计算的长度.通过标量划分数组也是元素方面的.

    ipython中的一个例子:

    In [1]: import math
    
    In [2]: import numpy as np
    
    In [3]: a = np.array([4,2,7])
    
    In [4]: np.linalg.norm(a)
    Out[4]: 8.3066238629180749
    
    In [5]: math.sqrt(sum([n**2 for n in a]))
    Out[5]: 8.306623862918075
    
    In [6]: b = a/np.linalg.norm(a)
    
    In [7]: np.linalg.norm(b)
    Out[7]: 1.0
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,这In [5]是计算长度的另一种方法.In [6]显示了矢量的标准化.