python的矢量化代码

时间:2014-12-12 14:45:56

标签: python arrays loops vectorization

我使用npr.uniform(size =(N,2))创建了一个存储N个随机点坐标的数组。现在我想使用一个计算Xtotal ^ 2 + Ytotal ^ 2的函数,其中Xtotal和Ytotal分别是N x坐标和N y坐标的总和。通过使用for循环我没有问题,但现在我想独立运行程序多次(超过1000次),我能想到的唯一方法是使用for循环。是否可以在矢量化代码中实现它以使其运行更快?我正在做的实际项目有点复杂,在这里描述它太难了,但我想如果我能解决这个简化的程序,我就可以毫无困难地做更难的了。

感谢

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

>>> N = 5
>>> coords = np.random.uniform(size=(N, 2))
>>> coords

[[ 0.00510663  0.52338403]
 [ 0.88250555  0.0440339 ]
 [ 0.1753249   0.4534223 ]
 [ 0.13600696  0.71194949]
 [ 0.87044574  0.80934245]]

>>> coords.sum(axis=0)
array([ 2.31797242,  0.95364616])

>>> (coords.sum(axis=0)**2).sum()
12.247833350611774

如果要重复此次1000次,则可以尝试生成1000 * 5个随机数。请注意,如果您正在进行复杂处理(而不仅仅是求和和幂),那么一般来说,1000次重复无法进行矢量化。

答案 1 :(得分:1)

假设您的nprnumpy.random

>>> import numpy as np
>>> N = 5
>>> xy = np.random.uniform(size=(N, 2))
>>> xy[:, 0]
array([ 0.91602043,  0.14053012,  0.01789579,  0.84857576,  0.20245375])
>>> xy[:, 1]
array([ 0.39608331,  0.46119256,  0.23600489,  0.93313743,  0.9790776 ])

然后只使用切片和索引:

>>> xy[:, 0]**2 + xy[:, 1]**2
array([ 0.99597542,  0.23244729,  0.05601857,  1.5908263 ,  0.99958046])
>>> 
>>> xy[0, :]**2 + xy[1, :]**2
array([ 0.85884215,  0.36958056])