小编Jsl*_*Jsl的帖子

在Seaborn中添加单位以热图注释

我试图在Seaborn中显示一个百分比表作为热图:

sns.heatmap(S, annot=True, fmt=".1f", linewidths=1.0, square=1)
Run Code Online (Sandbox Code Playgroud)

但是,我希望在热图注释中的每个数字后面出现百分号.该fmt标志似乎只接受数字格式说明符.有没有办法在Seaborn中或者通过一些matplotlib调整来做到这一点?

python matplotlib seaborn

9
推荐指数
2
解决办法
4441
查看次数

二次算法的并行化

假设我有一个N个元素的向量(数组,列表,等等......)V,假设V 0到V (N-1).对于每个元素V i,需要针对每个索引j计算函数f(V i,V j)(包括情况i = j).该函数是对称的,因此一旦计算出f(V i,V j),就不需要重新计算f(V j,V i).然后我们对函数进行N(N + 1)/ 2次总评估,使其成为O(N 2)算法.让我们假设计算f所花费的时间相对较长但是一致.

现在,我想并行执行算法.我需要确定(某些M个)工作线程的调度,以便两个线程不会同时使用相同的内存部分(即相同的元素).例如,f(V 1,V 2)可以与f(V 3,V 4)平行评估,但不与f(V 2,V 3)平行.工作流程分为几个步骤,每个步骤,每个工作线程执行一次f的评估.然后线程被同步,之后它们继续进行下一步,依此类推.

问题是,我如何确定(最好是最佳)每个线程的时间表作为一系列索引对(i,j),以便解决完整的问题(即考虑到对称性,每个索引对只访问一次)?虽然直接答案当然是好的,但我也很欣赏指向算法甚至相关网站/文献的指针.

algorithm parallel-processing

6
推荐指数
1
解决办法
190
查看次数

从基于生成器的协程转换为原生协程

我已经使用 Python 很多年了,但只是逐渐研究了该语言更晦涩的特性,因为我的大部分代码都是用于数据处理的。基于的生成器yield是我日常工具包的一部分,最近我阅读了关于协程的文章。我找到了一个类似的例子:

def averager():
    sum = 0.0
    n = 0
    while True:
        value = yield
        sum += value
        n += 1
        print(sum/n)

avg = averager()
next(avg) # prime the coroutine
avg.send(3)
avg.send(4)
avg.send(5)
Run Code Online (Sandbox Code Playgroud)

它打印发送给它的值的平均值。我认为这样的事情可能在数据处理管道中有用,所以我决定把它放在我的脑海里。也就是说,直到我在Python 文档中看到以下通知:

对基于生成器的协程的支持已被弃用,并计划在 Python 3.10 中删除。

显然我想编写面向未来的代码,所以此时开始学习基于生成器的协程可能没用。那么,我的问题是:如何使用本机 ( asyncio) 协程来实现此示例?我很难围绕原生协程语法进行思考。

在尝试寻找答案时,我发现了一个相关的问题,其中有一条评论和一个答案,基本上是说“你不能用async来做,而是用yield基于的协程来做”。但是如果这些都消失了,在 3.10+ 中是否有任何方法可以使用协程来做到这一点?

python coroutine python-asyncio

6
推荐指数
1
解决办法
463
查看次数