gpt4 book ai didi

python - 使用 numpy 进行下采样

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:41 28 4
gpt4 key购买 nike

我有一个表示分类数据的一维数组 A(其中每个条目都是某个类别的元素数):

A = array([ 1, 8, 2, 5, 10, 32, 0, 0, 1, 0])

我正在尝试编写一个函数sample(A, N) 来生成一个数组B,其中包含通过从A 中随机抽取元素生成的N 个元素(保持类别):

>>> sample(A, 20)
array([ 1, 3, 0, 1, 4, 11, 0, 0, 0, 0])

我是这样写的:

def sample(A, N):
AA = A.astype(float).copy()
Z = zeros(A.shape)
for _ in xrange(N):
drawn = random.multinomial(1, AA/AA.sum())
Z = Z + drawn
AA = AA - drawn
return Z.astype(int)

可能这很天真,有更好/更快的方法吗?也许使用一些快速的 numpy 函数?编辑:不清楚:必须没有替换!!!

最佳答案

据我所知比其他人快。但可能会占用更多内存。

import random 
from collections import Counter

def sample2(A,N):
distribution = [i for i, j in enumerate(A) for _ in xrange(j)]
sample = Counter(random.sample(distribution, N))
return [sample[i] for i in xrange(len(A))]


In [52]: A = np.random.randint(0, 100, 500)

In [53]: %timeit sample(A, 100) #Original
100 loops, best of 3: 2.71 ms per loop

In [54]: %timeit sample2(A, 100) #my function
1000 loops, best of 3: 914 µs per loop

In [55]: %timeit sample3(A, 100) #sftd function
100 loops, best of 3: 8.33 ms per loop

关于python - 使用 numpy 进行下采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479970/

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