减少numpy数组的大小,同时保留其中的信息

时间:2018-03-02 16:46:00

标签: python numpy scipy

我是python的新手,我正在尝试做一些像bining numpy数组的数据。我真的在努力这样做,所以!

我的阵列是一个简单的粒子扩散模型的模拟,给出了它们向前或向后行走的概率。它可以具有任意数量的粒子种类和粒子的总数,并且该信息在关键向量中编码,该关键向量是由0到nSpec的数字组成的向量。这些数字中的每一个都根据用户选择的给定比例出现。矢量的大小也由用户选择。

def walk(diff, key, progressProbability, recessProbability, nSpecies):
"""
Returns an array with the positions of the particles pondered by their
walk probabilities
"""
random = np.random.rand(len(key))
forward = key.astype(float)
backward = key.astype(float)


for i in range(nSpecies):
    forward[key == i] = progressProbability[i]
    backward[key == i] = recessProbability[i]


diff = np.add(diff, random < forward)
diff = np.subtract(diff, random > 1 - backward)

return diff

为了给这个模拟增加时间,我多次运行这个步行函数。因此,多次运行此函数后diff中的值表示粒子已经走了多远。

def probability_diffusion(time, progressProbability, recessProbability, 
                          changeProbability, key, nSpecies, nBins):

populationSize = len(key)

diff = np.zeros(populationSize, dtype= int)

for t in range(time):
    diff = walk(diff, key, progressProbability, recessProbability, nSpecies)

return diff    

我的目标是将此diff数组转换为大小为381的数组,而不会丢失其中编码的信息。我想通过对每个bin中的数据进行分箱和平均来实现这一目的。

我尝试过使用scipy binned_statistic函数,但我无法真正理解其工作原理。

有什么想法?谢谢。

0 个答案:

没有答案