Python Numpy:在一个具体的例子中去掉循环

Python Numpy:在一个具体的例子中去掉循环,python,numpy,Python,Numpy,我是Numpy的新手,已经读了一些关于它的东西。它反复地说,在使用Numpy时应该去掉循环,因为否则会有一些Python开销,这会降低代码的速度。因此,为了练习,我尝试以“numpythonic”的方式实现一个简单的算法,但我无法摆脱for循环。有没有办法改进这个解决方案 我的主要问题是,我有一些“累积条件”的情况,我不知道如何在没有循环的情况下解决这个问题 import numpy as np def process(data): r = np.zeros(3) for d

我是Numpy的新手,已经读了一些关于它的东西。它反复地说,在使用Numpy时应该去掉循环,因为否则会有一些Python开销,这会降低代码的速度。因此,为了练习,我尝试以“numpythonic”的方式实现一个简单的算法,但我无法摆脱for循环。有没有办法改进这个解决方案

我的主要问题是,我有一些“累积条件”的情况,我不知道如何在没有循环的情况下解决这个问题

import numpy as np

def process(data):
    r = np.zeros(3)
    for d in data:
        ru = r / np.linalg.norm(r)
        r = np.where(
            np.dot(ru, d) < 0.0,
            r + np.negative(d),
            r + d
        )    
    return r

data = [
    [0.99558784, 0.03476669, -0.08715574],
    [0.99194152, 0.1217951, -0.0348995],
    [0.9864998, 0.08630755, -0.1391731]
]

print(process(data))
# Out: [ 2.97402916  0.24286934 -0.26122834]
将numpy导入为np
def过程(数据):
r=np.零(3)
对于数据中的d:
ru=r/np.linalg.norm(r)
r=np.where(
np.dot(ru,d)<0.0,
r+np.负(d),
研发
)    
返回r
数据=[
[0.99558784, 0.03476669, -0.08715574],
[0.99194152, 0.1217951, -0.0348995],
[0.9864998, 0.08630755, -0.1391731]
]
打印(过程(数据))
#输出:[2.97402916 0.24286934-0.26122834]
(除了我的主要问题之外,我当然愿意接受一般性的批评或改进建议)

一些评论:

  • 在第一个循环中,您的
    ru=…
    语句生成警告-它除以0
  • 在本例中,
    np.dot()
    返回单个浮点,而不是数组。因此,没有必要使用
    np.where()
    <代码>如果语句会更快
  • 对于您提供的数据,您的函数相当于
    np.sum(data,axis=0)