python的矢量化代码

2024-10-05 13:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个数组,用npr制服(大小=(N,2))。现在我想用一个函数来计算Xtotal^2+Ytotal^2,其中Xtotal和Ytotal分别是nx坐标和ny坐标的和。通过使用for循环,我没有问题,但是现在我想独立运行程序很多次(超过1000次),我能想到的唯一方法就是使用for循环。有没有可能在矢量化的代码中这样做,让它运行得更快?我正在做的实际项目有点复杂,在这里描述它太难了,但是我想如果我能解决这个简化的程序,我做更难的就没有问题了。你知道吗

谢谢


Tags: 项目方法函数代码程序for数组矢量化
2条回答

假设你的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])

这就是你想要的吗?你知道吗

>>> 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次重复无法矢量化。你知道吗

相关问题 更多 >

    热门问题