18

什么是 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
4

1 回答 1

35

您可以只使用 numpy 数组。查看numpy for matlab 用户页面,详细了解数组 wrt 矩阵的优缺点。

正如我在评论中提到的,必须使用dot()函数或方法进行向量的乘法是最大的陷阱。但话又说回来,numpy 数组是一致的。所有操作都是元素方面的。因此,对数组进行加减运算以及与标量的乘法运算都可以按向量的预期工作。

Edit2:从 Python 3.5 和 numpy 1.10 开始,您可以使用中@缀运算符进行矩阵乘法,这要归功于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
    

    请注意,这In [5]是计算长度的另一种方法。In [6]显示对向量进行归一化。

于 2012-08-21T08:39:55.103 回答