python numpy向量数学

python numpy向量数学,python,numpy,Python,Numpy,什么是numpy相当于的2d向量类/操作?(如: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 您可以只使

什么是
numpy
相当于的2d向量类/操作?(如:
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

您可以只使用numpy数组。有关阵列w.r.t.矩阵优缺点的详细概述,请参阅该页

正如我在评论中提到的,必须使用
dot()
函数或方法对向量进行多重复制是最大的陷阱。但话说回来,numpy数组是一致的。所有操作都是基于元素的。所以,数组的加减和标量的乘法,都和向量的预期一样有效

Edit2:从Python 3.5和numpy 1.10开始,您可以使用
@
中缀运算符进行矩阵乘法,这要感谢

编辑:关于您的评论:

  • 对。整个numpy是基于阵列的

  • linalg.norm(v)
    是获得向量长度的好方法。但是你得到什么取决于第二个可能的论点!阅读文档

  • 要规范化向量,只需将其除以(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
    
    请注意,[5]中的
    是计算长度的另一种方法<[6]中的代码>显示了向量的规格化


  • 如果我错了,有人可以纠正我,但我认为你所做的是相当标准的。需要注意的一件事是数组的乘法。Numpy数组乘以元素。如果要将两个向量相乘,请使用
    dot()
    方法。从评论和答案来看,我认为人们完全误解了你的问题,没有意识到你在谈论替换
    euclid
    模块。顺便问一下,迁移过程如何?它的动机是表现吗?我计划使用欧几里德,所以欢迎提供任何提示:)[1]这是常用的方法吗?(使用numpy.array vs euclid或其他东西)[2]获取
    Vector2.magnity()
    我是否使用
    linalg.norm(v)
    [3]我对
    Vector2.normalize()使用什么函数?