gpt4 book ai didi

python - 如何根据另一个数组的均值和标准差生成有界随机数组?

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:52 24 4
gpt4 key购买 nike

我有一个包含 R 行和 C 列的数组 X。我希望生成一个名为 a_array 的新数组,其中每个元素将根据 X 中相应行的均值和标准差随机生成。使用 Numpy 执行此操作的最 pythonic 和最有效的方法是什么?

目前,我正在使用嵌套循环来生成元素级数字。

a_array = np.zeros(shape=(a_size, X.shape[0]))
for i in range(a_size):
for j in range(X.shape[0]):
a_array[i][j] = np.random.randint(low=X[i].mean()-X[i].std(), high=X[i].mean()+X[i].std())

编辑:抱歉,我忘记了什么,但我还想确保 a_array 的每一行都包含唯一元素(任何行中都没有重复元素)。到目前为止,我还没有想出任何方法来实现这一目标。

最佳答案

部分矢量化

我们可以将它减少到一个循环 -

m,s = X[:a_size].mean(1),X[:a_size].std(1)
L = (m-s).astype(int)
H = (m+s).astype(int)
out = np.empty((a_size,X.shape[0]),dtype=int)
for i,(l,h) in enumerate(zip(L,H)):
out[i] = np.random.choice(np.arange(l,h),X.shape[0],replace=False)

基本思路:

  1. 沿第二个轴计算平均值和标准值。在此之前,如果 a_size 不是 X 中的行数,我们需要对 X 进行切片以将其限制为 a_size

  2. 在原始的 loopy 版本中,我们使用 random.randint 以 mean-std 和 mean+std 作为限制。因此,对于提议的版本,使用步骤#1 中的平均值和标准值获取下限和上限。

  3. 使用 np.random.choice(np.arange(l,h),X.shape[0],replace=False) 运行一个循环,其中的低值和高值设置要选择的值范围,并选择大小为 X.shape[0] 的随机值和具有 replace=False 的唯一值。

完全矢量化

我们可以使用 1 中列出的技巧使其完全矢量化& 2给我们类似下面的内容来替换前面列出的循环步骤:

R = H-L
MX = R.max()
n = X.shape[0]
unqIDs = np.random.rand(len(L),MX).argpartition(axis=1,kth=n)[:,:n]
out = unqIDs%R[:,None] + L[:,None]

请注意,这会占用更多内存。

关于python - 如何根据另一个数组的均值和标准差生成有界随机数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55750306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com