Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用函数填充numpy数组_Python_Arrays_Numpy - Fatal编程技术网

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)