【发布时间】:2021-12-23 07:38:11
【问题描述】:
我有很长的 numpy 数组:
v = np.array([10, 15, 15, 15, 10, 30, 30, 10, 10])
我想在每个元素后插入 0 概率
stop_prob = 0.5
所以结果可能如下所示:
[ 0 10 0 0 15 0 0 15 15 10 0 0 30 30 10 10 0 0]
这是我的代码:
v_new = []
for j in range(len(v)+1):
choice = np.random.choice([1, 0], p=[1-stop_prob, stop_prob])
while choice == 0:
v_new.append(0)
choice = np.random.choice([1, 0], p=[1-stop_prob, stop_prob])
if j != len(v):
v_new.append(v[j])
它可以工作,但是对于非常大的列表(具有数百万个值)需要很长时间。如何矢量化这个算法?
这是我的矢量化尝试:
idx = np.random.choice([1, 0], size=len(v), p=[1-stop_prob, stop_prob])
v = np.insert(v, idx, 0)
但结果不正确:
[ 0 0 0 0 0 0 0 0 10 0 15 15 15 10 30 30 10 10]
它将所有零放在列表的开头
【问题讨论】:
标签: python arrays numpy insert vectorization