如何在python中实现概率分布的合并?

     2023-03-12     130

关键词:

【中文标题】如何在python中实现概率分布的合并?【英文标题】:How to implement Conflation for probability distribution in python? 【发布时间】:2021-01-28 10:26:09 【问题描述】:

我在网上寻找将几个连续概率分布组合成一个连续概率分布的方法。这种方法称为 Conflation,方法可以在以下文章中找到:An Optimal Method for Consolidating Data from Different Experiments。在这篇文章中,我发现执行 Conflation 比求平均来组合分布更好。

根据我从文章中了解到的情况,该方程通过将来自多个概率分布的每个概率密度值除以来自多个概率分布的每个概率密度值的乘积的积分来执行,对于连续分布,而对于离散分布,它是通过将来自多个概率分布的每个概率密度值乘以来自多个概率分布的每个概率密度值的总和来完成。 (详情可见文章第5页)

假设我有大约 4 个列表,例如来自 4 个范数分布,例如,

list_1 = [5, 8, 6, 2, 1]
list_2 = [2, 6, 1, 3, 8]
list_3 = [1, 9, 2, 7, 5]
list_4 = [3, 2, 4, 1, 6]

并实现结果列表变成的合并,

Con_list = [2.73, 34.56, 3.69, 3.23, 12]

(如果我错了,请纠正我)

如何将照片中的两个方程实现到python中以获得输入PDF分布的合并?

我之前发现了关于平均列表的stackflow问题,代码如下,

def average(l):
    llen = len(l)
    def divide(x):
        return x / llen
    # return map(divide, map(sum, zip(*l)))
    return map(divide, map(sum, zip(l)))

我一直在尝试重新编码此函数以遵循上面的等式,但我找不到一种方法来获取合并的 pdf 以实现连续分布。

编辑 1:

根据 @Josh Purtell 的回答,我重写了代码,但是,我不断收到以下错误消息:

错误信息:

Traceback (most recent call last):
  File "/tmp/sessions/c903d99d60f20c3b/main.py", line 72, in <module>
    graph=conflate_pdf(domain, dists,lb,ub)
  File "/tmp/sessions/c903d99d60f20c3b/main.py", line 58, in conflate_pdf
    denom = quad(prod_pdf, lb, ub, args=(dists))[0]
  File "/usr/local/lib/python3.6/dist-packages/scipy/integrate/quadpack.py", line 341, in quad
    points)
  File "/usr/local/lib/python3.6/dist-packages/scipy/integrate/quadpack.py", line 448, in _quad
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
TypeError: only size-1 arrays can be converted to Python scalars

代码:

def prod_pdf(x,pdfs):
    prod=np.ones(pdfs[0].shape[0])
    for pdf in pdfs:
        prod=prod*pdf
    return prod

def conflate_pdf(x,dists,lb,ub):
    denom = quad(prod_pdf, lb, ub, args=(dists))[0]
    return prod_pdf(x,dists)/denom

lb=-10
ub=10
domain=np.arange(lb,ub,.01)

dist_1 = stats.norm.pdf(domain, 2,1)
dist_2 = stats.norm.pdf(domain, 2.5,1.5)
dist_3 = stats.norm.pdf(domain, 2.2,1.6)
dist_4 = stats.norm.pdf(domain, 2.4,1.3)
dist_5 = stats.norm.pdf(domain, 2.7,1.5)

dists=[dist_1, dist_2, dist_3, dist_4, dist_5]
graph=conflate_pdf(domain, dists,lb,ub)

from matplotlib import pyplot as plt
plt.plot(domain, dist_1)
plt.plot(domain, dist_2)
plt.plot(domain, dist_3)
plt.plot(domain, dist_4)
plt.plot(domain, dist_5)
plt.plot(domain,graph)
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("Conflated PDF")
plt.show()

从代码来看,这个错误是什么原因造成的?

编辑 2:

我设法重写代码以查看分发列表,而不是在 Edit 1 的产品功能中获取 pdf,但我仍然在 Edit 中遇到相同的错误1.

代码:

def prod_pdf(x,pdfs):
    prod=np.ones(np.array(pdfs)[0].shape)
    for pdf in pdfs:
        print(prod)
        for c,y in enumerate(pdf):
            prod[c]=prod[c]*y
        print('final:', prod)
    return prod

def conflate_pdf(x,dists,lb,ub):
    denom = quad(prod_pdf, lb, ub, args=(dists))[0]
    print('Denom: ',denom)
    print('product pdf: ', prod_pdf(x,dists))
    conflated_pdf=prod_pdf(x,dists)/denom
    print(conflated_pdf)
    return conflated_pdf

lb=-10
ub=10
domain=np.arange(lb,ub,.01)

dist_1 = st.norm.pdf(domain, 2,1)
dist_2 = st.norm.pdf(domain, 2.5,1.5)
dist_3 = st.norm.pdf(domain, 2.2,1.6)
dist_4 = st.norm.pdf(domain, 2.4,1.3)
dist_5 = st.norm.pdf(domain, 2.7,1.5)

from matplotlib import pyplot as plt
plt.plot(domain, dist_1, 'r')
plt.plot(domain, dist_2, 'g')
plt.plot(domain, dist_3, 'b')
plt.plot(domain, dist_4, 'y')
plt.plot(domain, dist_5, 'c')

dists=[dist_1, dist_2, dist_3, dist_4, dist_5]
graph=conflate_pdf(domain, dists,lb,ub)


plt.plot(domain,graph, 'm')
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("Conflated PDF")
plt.show()

编辑 3:

我尝试运行以下代码(基于 @Josh Purtell 的回答),但是,我继续获取一个变量,它在乘积函数之后获取整个数组并产生相同的错误关于 size-1 数组的消息。请参阅以下代码和部分输出:

代码:

from scipy.integrate import quad
from scipy import stats
import numpy as np

def prod_pdf(x,dists):
    p_pdf=1
    print('Incoming Array:', p_pdf)
    for dist in dists:
        p_pdf=p_pdf*dist
        print('final:', p_pdf)
    return p_pd

def conflate_pdf(x,dists,lb,ub):
    print('Input product pdf: ', prod_pdf(x,dists))
    denom = quad(prod_pdf, lb, ub, args=(dists,))[0]
    # denom = simps(prod_pdf)
    # denom = nquad(func=(prod_pdf), ranges=([lb, ub]), args=(dists,))[0]
    print('Denom: ', denom)
    conflated_pdf=prod_pdf(x,dists)/denom
    print('Conflated PDF: ', conflated_pdf)
    return conflated_pdf

lb=-10
ub=10
domain=np.arange(lb,ub,.01)

dist_1 = st.norm.pdf(domain, 2,1)
dist_2 = st.norm.pdf(domain, 2.5,1.5)
dist_3 = st.norm.pdf(domain, 2.2,1.6)
dist_4 = st.norm.pdf(domain, 2.4,1.3)
dist_5 = st.norm.pdf(domain, 2.7,1.5)

from matplotlib import pyplot as plt
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("Conflated PDF")
plt.legend()
plt.plot(domain, dist_1, 'r', label='Dist. 1')
plt.plot(domain, dist_2, 'g', label='Dist. 2')
plt.plot(domain, dist_3, 'b', label='Dist. 3')
plt.plot(domain, dist_4, 'y', label='Dist. 4')
plt.plot(domain, dist_5, 'c', label='Dist. 5')

dists=[dist_1, dist_2, dist_3, dist_4, dist_5]
print('distribution list: \n', dists)
graph=conflate_pdf(domain, dists,lb,ub)

plt.plot(domain,graph, 'm', label='Conflated Dist.')
plt.show()

这是输出的一小部分:

Incoming Array: 1
final: [2.14638374e-32 2.41991991e-32 2.72804284e-32 ... 6.41980576e-15
 5.92770938e-15 5.47278628e-15]
final: [4.75178372e-48 5.66328097e-48 6.74864868e-48 ... 7.03075979e-21
 6.27970218e-21 5.60806584e-21]
final: [2.80912097e-61 3.51131870e-61 4.38823989e-61 ... 1.32670185e-26
 1.14952951e-26 9.95834610e-27]
final: [1.51005552e-81 2.03116529e-81 2.73144352e-81 ... 1.76466623e-34
 1.46198598e-34 1.21092834e-34]
final: [1.09076800e-97 1.55234627e-97 2.20861552e-97 ... 3.72095218e-40
 2.98464396e-40 2.39335035e-40]
Input product pdf:  [1.09076800e-97 1.55234627e-97 2.20861552e-97 ... 3.72095218e-40
 2.98464396e-40 2.39335035e-40]
Incoming Array: 1
final: [2.14638374e-32 2.41991991e-32 2.72804284e-32 ... 6.41980576e-15
 5.92770938e-15 5.47278628e-15]
final: [4.75178372e-48 5.66328097e-48 6.74864868e-48 ... 7.03075979e-21
 6.27970218e-21 5.60806584e-21]
final: [2.80912097e-61 3.51131870e-61 4.38823989e-61 ... 1.32670185e-26
 1.14952951e-26 9.95834610e-27]
final: [1.51005552e-81 2.03116529e-81 2.73144352e-81 ... 1.76466623e-34
 1.46198598e-34 1.21092834e-34]
final: [1.09076800e-97 1.55234627e-97 2.20861552e-97 ... 3.72095218e-40
 2.98464396e-40 2.39335035e-40]

我设法查看代码以在 Edit 3 中实现相同的方法,我编辑了从每个分布中获取第一个变量的代码,但是对于循环的其余部分,它会继续打印相同的值,它不会转到列表中的下一个值,并且合并分布是单个变量。请参阅以下代码和部分输出:

代码:

from scipy.integrate import quad
from scipy import stats
import numpy as np

def prod_pdf(x,dists):
    p_pdf=1
    print('Incoming Array:', p_pdf)
    for c,dist in enumerate(dists):
        p_pdf=p_pdf*dist[c]
        print('final:', p_pdf)
    return p_pdf

def conflate_pdf(x,dists,lb,ub):
    print('Input product pdf: ', prod_pdf(x,dists))
    denom = quad(prod_pdf, lb, ub, args=(dists,))[0]
    # denom = simps(prod_pdf)
    # denom = nquad(func=(prod_pdf), ranges=([lb, ub]), args=(dists,))[0]
    print('Denom: ', denom)
    conflated_pdf=prod_pdf(x,dists)/denom
    print('Conflated PDF: ', conflated_pdf)
    return conflated_pdf

lb=-10
ub=10
domain=np.arange(lb,ub,.01)

dist_1 = st.norm.pdf(domain, 2,1)
dist_2 = st.norm.pdf(domain, 2.5,1.5)
dist_3 = st.norm.pdf(domain, 2.2,1.6)
dist_4 = st.norm.pdf(domain, 2.4,1.3)
dist_5 = st.norm.pdf(domain, 2.7,1.5)

from matplotlib import pyplot as plt
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("Conflated PDF")
plt.legend()
plt.plot(domain, dist_1, 'r', label='Dist. 1')
plt.plot(domain, dist_2, 'g', label='Dist. 2')
plt.plot(domain, dist_3, 'b', label='Dist. 3')
plt.plot(domain, dist_4, 'y', label='Dist. 4')
plt.plot(domain, dist_5, 'c', label='Dist. 5')

dists=[dist_1, dist_2, dist_3, dist_4, dist_5]
print('distribution list: \n', dists)
graph=conflate_pdf(domain, dists,lb,ub)

plt.plot(domain,graph, 'm', label='Conflated Dist.')
plt.show()

部分输出:

Incoming Array: 1
final: 2.1463837356630605e-32
final: 5.0231307782193034e-48
final: 3.266239495519432e-61
final: 2.187514996217005e-81
final: 1.979657878680375e-97
Incoming Array: 1
final: 2.1463837356630605e-32
final: 5.0231307782193034e-48
final: 3.266239495519432e-61
final: 2.187514996217005e-81
final: 1.979657878680375e-97
Denom:  3.95931575736075e-96
Incoming Array: 1
final: 2.1463837356630605e-32
final: 5.0231307782193034e-48
final: 3.266239495519432e-61
final: 2.187514996217005e-81
final: 1.979657878680375e-97
Conflated PDF:  0.049999999999999996

编辑 4:

我实现了以下代码,它似乎可以工作,而且,我设法解决了quad 的问题,如果我将quad 更改为fixed_quad 并规范化pdf 列表。我会得到同样的结果。下面是代码:

import scipy.stats as st
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler, Normalizer, normalize, StandardScaler
from scipy.integrate import quad, simps, quad_vec, nquad, cumulative_trapezoid
from scipy.integrate import romberg, trapezoid, simpson, romb
from scipy.integrate import fixed_quad, quadrature, quad_explain
from scipy import stats
import time

def user_prod_pdf(x,dists):
p_list=[]
p_pdf=1
print('Incoming Array:', p_pdf)
for dist in dists:
print('Incoming Distribution Array:', dist.pdf(x))
p_pdf=p_pdf*dist.pdf(x)
print('Product PDF:', p_pdf)
p_list.append(p_pdf)
print('final Product PDF:', p_pdf)
print('Product PDF list: ', p_list)
return p_pdf

def user_conflate_pdf(x,dists,lb,ub):
print('Input product pdf: ', user_prod_pdf(x,dists))
denom = quad(user_prod_pdf, lb, ub, args=(dists,))[0]
print('Denom: ', denom)
conflated_pdf=user_prod_pdf(x,dists)/denom
print('Conflated PDF: ', conflated_pdf)
return conflated_pdf

def user_conflate_pdf_2(pdfs):
"""
Compute conflation of given pdfs.

[ARGS]
- pdfs: PDFs numpy array of shape (n, x)
where n is the number of PDFs
and x is the variable space.

[RETURN]
A 1d-array of normalized conflated PDF.
"""
# conflate
conflation = np.array(pdfs).prod(axis=0)
# normalize
conflation /= conflation.sum()
return conflation

def my_product_pdf(x,dists):
p_list=[]
p_pdf=1
print('Incoming Array:', p_pdf)
list_full_size=np.array(dists).shape
print('Full list size: ', list_full_size)
print('list size: ', list_full_size[0])
for x in range(list_full_size[1]):
p_pdf=1
for y in range(list_full_size[0]):
p_pdf=float(p_pdf)*dists[y][x]
print('Product value: ', p_pdf)
print('Product PDF:', p_pdf)
p_list.append(p_pdf)
print('final Product PDF:', p_pdf)
print('Product PDF list: ', p_list)
# return p_pdf
return p_list
# return np.array(p_list)

def my_conflate_pdf(x,dists,lb,ub):
print('\n')
# print('product pdf: ', prod_pdf(x,dists))
print('product pdf: ', my_product_pdf(x,dists))
denom = fixed_quad(my_product_pdf, lb, ub, args=(dists,), n=1)[0]
print('Denom: ', denom)
# conflated_pdf=prod_pdf(x,dists)/denom
conflated_pdf=my_product_pdf(x,dists)/denom
# conflated_pdf=[i / j for i,j in zip(my_product_pdf(x,dists), denom)]
print('Conflated PDF: ', conflated_pdf)
return conflated_pdf

lb=-10
ub=10
domain=np.arange(lb,ub,.01)

# dist_1 = st.norm(2,1)
# dist_2 = st.norm(2.5,1.5)
# dist_3 = st.norm(2.2,1.6)
# dist_4 = st.norm(2.4,1.3)
# dist_5 = st.norm(2.7,1.5)

# dist_1_pdf = st.norm.pdf(domain, 2,1)
# dist_2_pdf = st.norm.pdf(domain, 2.5,1.5)
# dist_3_pdf = st.norm.pdf(domain, 2.2,1.6)
# dist_4_pdf = st.norm.pdf(domain, 2.4,1.3)
# dist_5_pdf = st.norm.pdf(domain, 2.7,1.5)

# dist_1_pdf /= dist_1_pdf.sum()
# dist_2_pdf /= dist_2_pdf.sum()
# dist_3_pdf /= dist_3_pdf.sum()
# dist_4_pdf /= dist_4_pdf.sum()
# dist_5_pdf /= dist_5_pdf.sum()

dist_1 = st.norm(2,1)
dist_2 = st.norm(4,2)
dist_3 = st.norm(7,4)
dist_4 = st.norm(2.4,1.3)
dist_5 = st.norm(2.7,1.5)

dist_1_pdf = st.norm.pdf(domain, 2,1)
dist_2_pdf = st.norm.pdf(domain, 4,2)
dist_3_pdf = st.norm.pdf(domain, 7,4)
dist_4_pdf = st.norm.pdf(domain, 2.4,1.3)
dist_5_pdf = st.norm.pdf(domain, 2.7,1.5)

# dist_1_pdf /= dist_1_pdf.sum()
# dist_2_pdf /= dist_2_pdf.sum()
# dist_3_pdf /= dist_3_pdf.sum()
# dist_4_pdf /= dist_4_pdf.sum()
# dist_5_pdf /= dist_5_pdf.sum()

# User:
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("User Conflated PDF")
plt.plot(domain, dist_1_pdf, 'r', label='Dist. 1')
plt.plot(domain, dist_2_pdf, 'g', label='Dist. 2')
plt.plot(domain, dist_3_pdf, 'b', label='Dist. 3')
plt.plot(domain, dist_4_pdf, 'y', label='Dist. 4')
plt.plot(domain, dist_5_pdf, 'c', label='Dist. 5')

dists=[dist_1, dist_2, dist_3, dist_4, dist_5]
user_graph=user_conflate_pdf(domain,dists,lb,ub)
print('Final Conflated PDF: ', user_graph)

# user_graph /= user_graph.sum()

plt.plot(domain, user_graph, 'm', label='Conflated PDF')
plt.legend()
plt.show()

# User 2:
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("User Conflated PDF 2")
plt.plot(domain, dist_1_pdf, 'r', label='Dist. 1')
plt.plot(domain, dist_2_pdf, 'g', label='Dist. 2')
plt.plot(domain, dist_3_pdf, 'b', label='Dist. 3')
plt.plot(domain, dist_4_pdf, 'y', label='Dist. 4')
plt.plot(domain, dist_5_pdf, 'c', label='Dist. 5')

dists=[dist_1_pdf, dist_2_pdf, dist_3_pdf, dist_4_pdf, dist_5_pdf]
user_graph=user_conflate_pdf_2(dists)
print('Final User Conflated PDF 2 : ', user_graph)

# user_graph /= user_graph.sum()

plt.plot(domain, user_graph, 'm', label='Conflated PDF')
plt.legend()
plt.show()

# My Code:
# from matplotlib import pyplot as plt
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("My Conflated PDF Code")
plt.plot(domain, dist_1_pdf, 'r', label='Dist. 1')
plt.plot(domain, dist_2_pdf, 'g', label='Dist. 2')
plt.plot(domain, dist_3_pdf, 'b', label='Dist. 3')
plt.plot(domain, dist_4_pdf, 'y', label='Dist. 4')
plt.plot(domain, dist_5_pdf, 'c', label='Dist. 5')

dists=[dist_1_pdf, dist_2_pdf, dist_3_pdf, dist_4_pdf, dist_5_pdf]
my_graph=my_conflate_pdf(domain,dists,lb,ub)
print('Final Conflated PDF: ', my_graph)

my_graph /= np.array(my_graph).sum()

# my_graph = inverse_normalise(my_graph)

plt.plot(domain, my_graph, 'm', label='Conflated PDF')
plt.legend()
plt.show()

# Conflated PDF:
print('User Conflated PDF: ', user_graph)
print('My Conflated PDF: ', np.array(my_graph))

这是输出:

我的问题是,我知道我需要标准化 PDF 列表。但是,假设我没有规范化 PDF,如何修改我的合并代码以获得以下图?

要获得上面的情节和我的混合代码:

# user_graph /= user_graph.sum()
# dist_1_pdf /= dist_1_pdf.sum()
# dist_2_pdf /= dist_2_pdf.sum()
# dist_3_pdf /= dist_3_pdf.sum()
# dist_4_pdf /= dist_4_pdf.sum()
# dist_5_pdf /= dist_5_pdf.sum()

我没有规范化的混合代码图:

【问题讨论】:

【参考方案1】:

免责声明:我很可能误解了您或论文作者,在这种情况下,请建议对此答案进行修改。

这是我认为合并可能看起来像的一个微不足道的、性能不是特别好的实现

##define pdfs for discrete RV X = 1,2,3,4
import numpy as np

def mult_list(pdfs):
    prod=np.ones(pdfs[0].shape[0])
    for pdf in pdfs:
        prod=prod*pdf
    return prod

def conflate(pdfs):
    return mult_list(pdfs)/sum(mult_list(pdfs))

pdf_1=np.array([.25,.25,.25,.25])
pdf_2=np.array([.33,.33,.33,.00])
pdf_3=np.array([.25,.12,.13,.50])

print(conflate([pdf_1,pdf_2,pdf_3]))

生成合并后的 pdf

>>> [0.5  0.24 0.26 0.  ]

它通过了粗略的嗅探测试。

在事物的连续方面,上述转换为

from scipy.integrate import quad
from scipy import stats
import numpy as np

def prod_pdf(x,dists):
    p_pdf=1
    for dist in dists:
        p_pdf=p_pdf*dist.pdf(x)
    return p_pdf

def conflate_pdf(x,dists,lb,ub):
    denom = quad(prod_pdf, lb, ub, args=(dists))[0]
    return prod_pdf(x,dists)/denom

dists=[stats.norm(2,1),stats.norm(4,2)]
lb=-10
ub=10
domain=np.arange(lb,ub,.01)
graph=conflate_pdf(domain,dists,lb,ub)

from matplotlib import pyplot as plt
plt.plot(domain,graph)
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("Conflated PDF")
plt.show()
plt.savefig("conflatedpdf.png")

这给了

正如您所见,分布并非像人们希望的那样是双峰的。

【讨论】:

感谢您的回答。只是为了让我理解您的代码,因此您将每个列表中的值乘以 1,然后对于乘法部分,它在分子处完成,分母将看起来和运算符。另外,如果是连续分布呢? @WDpad159 刚刚添加了我的连续分布方法 感谢您的帮助。在之前的评论中是我对代码的解释是对的吗? 这是论文的引述:“对于离散输入分布,合并的类似定义是概率质量函数的归一化乘积”。在代码中,我为 RV 图像空间中的每个元素找到了 pmfs 的乘积(pdf 的离散模拟,我的代码命名诚然忽略了这种区别),然后用所有此类乘积的总和对该乘积进行归一化(这样它加一)。我用 1 初始化产品的原因是 for 循环是对称的;这就像用 0 初始化一个总和。 代码工作正常,但如果我使用 pdf 作为列表,我会不断收到代码错误。请参阅编辑后的问题。

如何在python中实现这五类强大的概率分布

要使用Python实现一些离散和连续的概率分布。虽然我不会讨论这些分布的数学细节,但我会以链接的方式给你一些学习这些统计学概念的好资料。在讨论这些概率分布之前,我想简单说说什么是随机变量(randomvariable)。随机变... 查看详情

如何在 Python 中实现机会/概率? [复制]

】如何在Python中实现机会/概率?[复制]【英文标题】:HowcanIimplementchance/probabilityintoPython?[duplicate]【发布时间】:2021-04-0722:09:36【问题描述】:我想让Python在70%的情况下打印“是”,在30%的情况下打印“否”。我该怎么做呢?【... 查看详情

如何在 Scipy 中实现日志均匀分布?

】如何在Scipy中实现日志均匀分布?【英文标题】:HowtoimplementaloguniformdistributioninScipy?【发布时间】:2018-09-0708:27:00【问题描述】:我不明白如何在Scipy中实现对数均匀概率分布。根据thispost的cmets,可以通过只定义_pdf来实现。另... 查看详情

如何在 Python 中实现 KS-Test

】如何在Python中实现KS-Test【英文标题】:HowtoimplementaKS-TestinPython【发布时间】:2019-09-3019:55:48【问题描述】:scipy.stats.kstest(rvs,cdf,N)可以对数据集rvs执行KS-Test。它测试数据集是否遵循概率分布,其cdf在此方法的参数中指定。现... 查看详情

如何在springcloud分布式系统中实现分布式锁?

最近在看分布式锁的资料,看了JosialL的《RedisinAction》的分布式锁的章节。实现思路是利用springcloud结合redis实现分布式锁。注意:这篇文章有问题,请看这一篇http://blog.csdn.net/forezp/article/details/70305336一般来说,对数据进行加锁... 查看详情

如何在任何 MQ 平台中实现这个单一并发分布式队列?

】如何在任何MQ平台中实现这个单一并发分布式队列?【英文标题】:HowcanIimplementthissingleconcurrencydistributedqueueinanyMQplatform?【发布时间】:2017-06-1804:19:02【问题描述】:我目前正在努力寻找实现特定类型队列的解决方案,这需要... 查看详情

在可可中实现分布式对象

...)。我需要从守护进程调用主应用程序中的一些方法。我如何在这里使用分布式对象?有人可以为此建议一个完整的教程(Apple文档除外)吗?【问题讨论】:看看this。【参考方案1】:我的(否则现在已经 查看详情

如何在springcloud分布式系统中实现分布式锁?

一、简介一般来说,对数据进行加锁时,程序先通过acquire获取锁来对数据进行排他访问,然后对数据进行一些列的操作,最后需要释放锁。Redis本身用watch命令进行了加锁,这个锁是乐观锁。使用watch命令对于频繁访问的键会引... 查看详情

在 C++ 中实现归并排序

...8-1508:54:51【问题描述】:我研究过归并排序的理论,但对如何在C++中实现它一无所知。我的问题是,合并排序以递归方式创建数组。但是在实现的时候,我们如何在运行时创建数组呢?或者对此的一般方法是什么?谢谢。【问题... 查看详情

如何在Python中实现EXCEL的查找功能

】如何在Python中实现EXCEL的查找功能【英文标题】:HowtoimplementEXCEL\'slookupfunctioninPython【发布时间】:2019-07-0523:15:19【问题描述】:我一直试图弄清楚如何在Python中实现类似于EXCEL的VLOOKUP函数的功能,以便使用一个共同的值组合... 查看详情

如何在 Python 中实现向量自回归?

】如何在Python中实现向量自回归?【英文标题】:HowtoimplementVectorAuto-RegressioninPython?【发布时间】:2013-08-2307:28:00【问题描述】:我想在python中实现向量自回归。我的数据保存为3个列表的列表。我找到了这个-http://statsmodels.sourcef... 查看详情

如何在 Python 的 heapq 中实现减少键功能?

】如何在Python的heapq中实现减少键功能?【英文标题】:HowcanIimplementdecrease-keyfunctionalityinPython\'sheapq?【发布时间】:2010-11-3017:48:04【问题描述】:我知道可以在O(logn)中实现减少键功能,但我不知道如何?【问题讨论】:【参考... 查看详情

我将如何在 python 中实现 vigenere 密码

】我将如何在python中实现vigenere密码【英文标题】:HowwouldIimplementthevigenerecipherinpython【发布时间】:2016-02-1118:01:03【问题描述】:过去我的任务是创建一个凯撒密码,现在我正在尝试在python中实现viginere密码。我想知道我将如何... 查看详情

str() 如何在 python 中实现?

】str()如何在python中实现?【英文标题】:howstr()implementinpython?【发布时间】:2019-07-1100:48:30【问题描述】:节省和结果的定义savings=100result=100*1.10**7修复打印输出print("Istartedwith$"+savings+"andnowhave$"+result+"Awesome!")pi_string的定义pi_stri... 查看详情

如何在 Python 中实现用户定义的异常? [复制]

】如何在Python中实现用户定义的异常?[复制]【英文标题】:HowcanIachieveuserdefinedexceptioninPython?[duplicate]【发布时间】:2017-05-0917:30:18【问题描述】:有许多内置的异常类,如EOFError、KeyboardInterrupt等。但是我怎样才能创建自己的异... 查看详情

如何在 Python 中实现类似 C# RSACryptoServiceProvider 的加密?

】如何在Python中实现类似C#RSACryptoServiceProvider的加密?【英文标题】:HowtoachieveC#RSACryptoServiceProvider-likeencryptioninPython?【发布时间】:2013-08-0616:49:02【问题描述】:所以,在C#中我有以下代码:publicstaticvoidMain(string[]args)publicKeyXml="... 查看详情

如何在 Python 中实现 itk 图像和 SimpleITK 图像之间的转换?

】如何在Python中实现itk图像和SimpleITK图像之间的转换?【英文标题】:HowcanIimplementtheconversionbetweenitkimageandSimpleITKimageinPython?【发布时间】:2014-01-2709:17:53【问题描述】:我知道如何在C++中实现itk图像和SimpleITK图像之间的转换,... 查看详情

如何在 Python 中实现优先级队列?

】如何在Python中实现优先级队列?【英文标题】:HowtoimplementPriorityQueuesinPython?【发布时间】:2012-04-1516:31:51【问题描述】:很抱歉提出这么愚蠢的问题,但Python文档令人困惑......链接1:队列实现http://docs.python.org/library/queue.html... 查看详情