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