python函数来确定一个数字在统计上属于给定数字列表的可能性

2024-09-27 00:16:58 发布

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

我试图找到一个函数(在Python中,理想情况下)来告诉我一个数字与给定的数字列表有多“相似”。最终的目标是找出一个给定的数字更可能是一个成员的列表。你知道吗

例如,以两个列表为例:

a = [5,4,8,3,6,4,7,2] 
b = [9,5,14,10,11,18,9]

函数应该采用一个新的数字,并告诉我它与给定的列表有多相似。例如,假设一个假设的“isSimilar”函数将返回一个数字可能是所提供列表成员的百分比概率:

# 5 looks pretty similar to list 'a' but not list 'b'.
>>> print isSimilar(a,5)
.9

>>> print isSimilar(b,5)
.5


# 15 looks more similar to list 'b'
>>> print isSimilar(a,15)
.4

>>> print isSimilar(b,15)
.8


# 10 looks like it has roughly the same chance to be in both lists
>>> print isSimilar(a,10)
.41

>>> print isSimilar(b,10)
.5

理想情况下,这个假设函数会考虑列表的标准差。例如,在以下两个列表中:

a = [5,6,4,5]
b = [1,9,2,8]

数字“5”与列表“a”比“b”更“相似”,因为“a”中数字的标准偏差要小得多。你知道吗

如果能帮我找到正确的方向,我将不胜感激。你知道吗


Tags: to函数目标列表情况成员数字概率
3条回答

对这两个集合使用估计的pdf如何?你知道吗

def get_most_likely_distribution_membership(value,d1,d2):
    nparam_density1 = stats.kde.gaussian_kde(d1) # can use a different kernel
    nparam_density2 = stats.kde.gaussian_kde(d2)
    x = np.linspace(-20, 30, 200) # maybe pre-define a range
    nparam_density1 = nparam_density1(x)
    nparam_density2 = nparam_density2(x)
    assert d1!=d2 

    if nparam_density1[np.where(abs(x-(value))==min(abs(x-(value))))].tolist() > nparam_density2[np.where(abs(x-(value))==min(abs(x-(value))))].tolist():
        return 1
    else:
        return 2

本质上,我们是说,如果一个单一的值在一个分布中更可能,它可能来自那个分布。你知道吗

示例:

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt

a = [5,4,8,3,6,4,7,2] # 1
b = [9,5,14,10,11,18,9] # 2
print(get_most_likely_distribution_membership(6,a,b))
print(get_most_likely_distribution_membership(10,a,b))

分别为1和2。你知道吗

可能是这样的:

def isSimilar(a_list, member):
    m_count = a_list.count(member)
    return m_count / len(a_list)

或者使用集合:

set(a_list).intersection( set(b_list))

它将返回两个列表的交集,然后您可以计算结果列表并进行其他数学运算。你知道吗

如果您使用的是字符串/序列/etc:https://docs.python.org/2/library/difflib.html,也可以考虑使用difflib

文档打开列表.计数():

https://docs.python.org/2/tutorial/datastructures.html

所以,我不太确定百分比。但是,找出这个数字更可能属于哪个列表应该不是太难。我只计算这个数字和列表中所有数字的平均差值。平均距离越接近0,就越有可能出现在列表中。你知道吗

  def whichList(self, list1, list2, someNumber):
        if self.averageDistance(someNumber,list1) < self.averageDistance(someNumber, list2):
            print "list 1"
        else:
            print "list 2"

  def averageDifference(self, someNumber,myList):
        sum = 0
        for num in myList:
            sum = sum + math.fabs(num-someNumber)
        return sum/len(myList)

相关问题 更多 >

    热门问题