使用numpy向量运算替换循环

问题描述 投票:-2回答:1

我有一个不允许循环的任务。在我的代码的一部分中,我需要用不同的步骤索引一个numpy数组。哪个numpy函数/操作可以帮助解决这种情况?下面给出一个示例。

lst0 = [1, 2, 3, 4, 5, 6, 7, 8]
lst1 = []
for i in range(3):
    lst1.append(lst0[::i+1])

任务的完整描述:

在时间间隔[0,1]上生成样本几何布朗路径。固定µ = 0.2和σ= 0.4,其中子间隔数为N= 2 ^ k。

估计σˆ和µˆ在粗化数据集上,其中仅使用第2 ^ i个数据点,其中i = 0,。 。 。 ,k。

绘制σˆ和µˆ与采样点数量的对数(semilogx)。

不允许循环,请实现所有矢量化的操作。

from p1a import geom_brownian
import numpy as np

if __name__ == '__main__':
    k = 10
    N = 2 ** k
    mu = 0.2
    sigma = 0.4
    seed = 5
    gbm = geom_brownian(N=N + 1, mu=mu, sigma=sigma, seed=seed)
    # gbm_matrix = np.array(np.tile(gbm, (k, 1)))

    sigma_est_lst = []
    mu_est_lst = []
    for i in range(k + 1):
        dt = 1 / 2 ** i
        step = int(N * dt)
        s_coarse = gbm[::step]
        r_arr = np.diff(np.log(s_coarse))
        r_mean = np.mean(r_arr)
        sigma_r = np.std(r_arr)
        sigma_est = sigma_r / np.sqrt(dt)
        mu_est = r_mean / dt + sigma_est ** 2 / 2
        sigma_est_lst.append(sigma_est)
        mu_est_lst.append(mu_est)
python numpy scientific-computing
1个回答
0
投票

如果我的理解正确,您可以通过以下方式重塑numpy数组的形状,使所得矩阵在同一行或同一列上具有所需的所有值,然后对该特定轴进行切片。

import numpy as np

a = np.arange(16)  # N=4
a.reshape(4,-1)[:,0]  # every 4 is a new row and take the 0th column

将返回您的array([0, 4, 8, 12]),即每4个(2 ^ 2 k = 2)值。

© www.soinside.com 2019 - 2024. All rights reserved.