python-从一个numpy数组的索引采样的有效方法?

考虑到每个索引都由该数组内部的数字加权,因此我想从2D Numpy数组的索引中进行采样.我知道的方式是使用numpy.random.choice,但是它不返回索引而是返回数字本身.有什么有效的方法吗?

这是我的代码:

import numpy as np
A=np.arange(1,10).reshape(3,3)
A_flat=A.flatten()
d=np.random.choice(A_flat,size=10,p=A_flat/float(np.sum(A_flat)))
print d

解决方法:

您可以执行以下操作:

import numpy as np

def wc(weights):
    cs = np.cumsum(weights)
    idx = cs.searchsorted(np.random.random() * cs[-1], 'right')
    return np.unravel_index(idx, weights.shape)

请注意,求和是最慢的部分,因此,如果需要对同一数组重复进行此操作,建议您提前计算并重新使用求和.

上一篇:Survey sampling


下一篇:Survey sampling