迭代减去数组中的值

2024-04-19 15:13:22 发布

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

从一个简单的numpy数组开始,例如:

a = np.array([1,1,0,2,1,0])

我的目标是迭代地从中减去值,直到某个阈值。例如,考虑a包括用户数。在这种情况下,5个用户分配有:

d = a/a.sum()

现在我想从这个初始分布中减去4个用户,在结果数组中始终保持值>;0。我可以构造一个随机数组来减去:

b = np.random.multinomial(4,d)

产生(在一次运行中):

array([0, 1, 0, 3, 0, 0])

类似a-b的结果导致:

array([ 1,  0,  0, -1,  1,  0])

如何约束生成的数组在生成的(a-b)操作中从不产生负值?到目前为止,我从另一个角度思考,产生一个随机分布:

r = np.random.multinomial(total users - deleted users,d)

根据用户的初始分布d,但是由于我必须对向量应用一些度量,因此后一种方法的结果可能会有所不同。你知道吗


Tags: 用户gtnumpy目标np情况阈值random
1条回答
网友
1楼 · 发布于 2024-04-19 15:13:22

如果您想随机地将a.sum()递减n,而a的任何元素都不会变为负数,这是一种方法:

def rnd_decrement(a, n):
    c = np.cumsum(np.r_[0, a])
    if n < c[-1]:
        r = np.random.choice(np.arange(c[-1]) + 1, n, replace = False)
        d = np.sum(r[:,None] <= c[None,:], axis=0)
        return np.diff(c-d)
    else:
        return np.zeros_like(a)

相关问题 更多 >