Python 使用函数填充numpy数组
我制作了一个函数,它执行随机游走模拟(Python 使用函数填充numpy数组,python,arrays,numpy,Python,Arrays,Numpy,我制作了一个函数,它执行随机游走模拟(random_path),并返回1D数组(长度num_steps+1)。我想使用此函数执行大量模拟(n_sims),然后检查我的结果。我可以使用列表和for循环执行此操作,如下所示: simulations=[] 对于范围内的i(0,n_sims): 当前模拟=随机路径(x,y,sigma,T,num\u步数) 模拟。附加(当前模拟) 这个很好用。我想知道是否有一种更像蟒蛇的方式来做这件事?是否可以仅使用numpy阵列执行此操作?也就是说,与其将模拟设置为
random_path
),并返回1D数组(长度num_steps+1
)。我想使用此函数执行大量模拟(n_sims
),然后检查我的结果。我可以使用列表和for循环执行此操作,如下所示:
simulations=[]
对于范围内的i(0,n_sims):
当前模拟=随机路径(x,y,sigma,T,num\u步数)
模拟。附加(当前模拟)
这个很好用。我想知道是否有一种更像蟒蛇的方式来做这件事?是否可以仅使用numpy阵列执行此操作?也就是说,与其将
模拟设置为空列表,然后使用for循环创建阵列列表,我可以使用函数random_path
直接初始化模拟
,以创建一个我认为最终形状为的阵列(n_sims,num_steps+1)
?您可以使用列表理解:
simulations = [random_path(x, y, sigma, T, num_steps) for i in range(n_sims)]
如果不想显式使用列表,可以尝试使用numpy.vectorize
:
import numpy as np
vect_func = np.vectorize(lambda ignored: random_path(x, y, sigma, T, num_steps))
simulations = vect_func(range(n_sims))
在这种特殊情况下,忽略
实际上是被忽略的。让我们假设您生成的随机游动是这样的(如果您不这样做,您可能应该):
要进行M
模拟,只需生成适当数量的数据点,并在正确的轴上求和:
walks = np.concatenate((np.zeros((M, 1)), np.random.normal(scale=sigma, size=(M, N)).cumsum(axis=-1)), axis=-1)
是的,对不起,我应该说得更清楚些。有没有一种不使用列表的方法可以做到这一点?@havingaball现在检查一下,这是一种更好的方法吗?np.vectorize
是一种美化的python循环。要获得numpythonic解决方案,您需要显示一个包含有问题的函数的MCVE。List append非常“pythonic”。唯一合理的选择是创建一个大小合适的模拟
,并执行模拟[i]=当前sim
。如果random\u path
足够复杂,那么迭代机制在时间上不会有太大差别。@hpaulj但不是很“numpytonic”:)谢谢,这就是我要找的。
walks = np.concatenate((np.zeros((M, 1)), np.random.normal(scale=sigma, size=(M, N)).cumsum(axis=-1)), axis=-1)