小编phy*_*nfo的帖子

隐式参数并将函数应用于固定大小向量的尾部

我编写了一个Agda函数applyPrefix,将固定大小的矢量函数应用于矢量大小的较长矢量的初始部分m,n并且k 可能保持隐式.这是定义和辅助函数split:

split : ? {A m n} ? Vec A (n + m) ? (Vec A n) × (Vec A m) 
split {_} {_} {zero}  xs        = ( [] , xs )
split {_} {_} {suc _} (x ? xs) with split xs 
... | ( ys , zs ) = ( (x ? ys) , zs )


applyPrefix : ? {A n m k} ? (Vec A n ? …
Run Code Online (Sandbox Code Playgroud)

agda dependent-type

4
推荐指数
1
解决办法
258
查看次数

使用MPI获得性能提升

我测试了并行化(几乎)"令人难以置信的并行"(即完全可并行化)算法的性能增益,该算法总结了第一个N整数:

串行算法很简单:

N = 100000000
print sum(range(N))
Run Code Online (Sandbox Code Playgroud)

我的双核笔记本电脑(联想X200)的执行时间:0m21.111s.

并行化(带mpi4py)版本使用3个节点; 节点0计算整数的下半部分之和,节点1计算上半部分的总和.两者都将结果(via comm.send)发送到节点2,节点2汇总两个数字并打印结果:

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()

N = 100000000

if rank == 0: 
  s = sum(range(N/2))
  comm.send(s,dest=2,tag=11)
elif rank == 1:
  s = sum(range(N/2+1,N))
  comm.send(s,dest=2,tag=11)
elif rank == 2:
  s1 = comm.recv(source=0, tag=11)
  s2 = comm.recv(source=1, tag=11)
  print s1+s2
Run Code Online (Sandbox Code Playgroud)

我的双核笔记本电脑的两个核心都被充分利用; 执行时间现在:15.746s.

我的问题:至少在理论上,执行时间几乎应该减半.哪个开销吃了4秒?(当然不是s1 + s2).那些发送/接收命令是否耗时?

编辑:在阅读了答案并重新思考问题之后,我认为4秒(在某些运行中甚至更多)被生成两个长度为50000000的列表所导致的高内存流量所吞噬; 我的笔记本电脑的两个核心共享一个公共内存(至少是主内存;我认为它们有独立的L2缓存),这正是瓶颈:因此,两个内核通常都希望同时访问内存(以获取内存)下一个列表元素),其中一个必须等​​待...

如果我使用xrange而不是range,则会延迟生成下一个列表元素并分配很少的内存.我测试了它并运行与上面相同的程序,xrange仅需11秒!

python parallel-processing mpi

2
推荐指数
1
解决办法
1811
查看次数

GHC为同一个表达式选择不同的实例?

我想实现一个带有arr-member-function 的箭头,显示不同类型的函数参数的不同行为,例如arr (\x -> (x,x))应该表现得与arr id... 不同

这是代码:

{-# LANGUAGE Arrows, OverlappingInstances, IncoherentInstances, FlexibleInstances#-}
import Control.Arrow
import Control.Category 
import Prelude hiding (id, (.))

class ToPredefinedStr a where
  toStr :: a -> String


instance ToPredefinedStr ((->) b (b,b)) where
  toStr _ = "b -> (b,b)"

instance ToPredefinedStr (a -> (b,c)) where
  toStr _ = "a -> (b,c)" 

instance ToPredefinedStr ((a,b) -> c) where
  toStr _ = "(a,b) -> c"

instance ToPredefinedStr (a -> b) where …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass ghc

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

bash文件模式和区分大小写的范围

我在bash的文件模式中遇到了以下恕我直言的奇怪行为:

$ ls
Basic1  datei1  datie2  sdfl
$ ls [a-z]*
Basic1  datei1  datie2  sdfl
$ ls [abcdefghijklmnopqrstuvwxyz]*
datei1  datie2  sdfl
Run Code Online (Sandbox Code Playgroud)

为什么范围的模式[a-z]不区分大小写?错误或功能?

注意:

  1. bash-Option nocasegloboff(否则,上面给出的第二种模式也应该不区分大小写......):

    $ shopt nocaseglob
    nocaseglob  off
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我的bash版本:

    $ bash --version
    GNU bash, Version 4.2.24(1)-release (i686-pc-linux-gnu)
    
    Run Code Online (Sandbox Code Playgroud)

GNU bash,版本4.2.24(1) - release(i686-pc-linux-gnu)

bash shell

2
推荐指数
1
解决办法
1281
查看次数

使用R中的ggplot2为Dataframe中的每一行绘制一条线

我得到了以下数据框,描述了不同德国地区的年龄结构:

在此输入图像描述

我想用R中的ggplot每行绘制一行.通过R中的matplot的简单解决方案是:

matplot(t(df61[,-c(1,2)], type="l"))
Run Code Online (Sandbox Code Playgroud)

产量:

在此输入图像描述

但它如何与ggplot一起使用.我明白了,我必须将数据帧转换为扁平形式:

library("reshape2")
df61_long <- melt(df61[,-2], id.vars = "NAME")
Run Code Online (Sandbox Code Playgroud)

这给了我:

在此输入图像描述

我认为通过ggplot的解决方案应该是这样的:

ggplot(df61_long, aes(x = "variable", y = "value")) + geom_line(aes(colors = "NAME"))
Run Code Online (Sandbox Code Playgroud)

但是,它会产生一个空坐标系.我做错了什么?

r ggplot2

2
推荐指数
1
解决办法
3468
查看次数

标签 统计

agda ×1

bash ×1

dependent-type ×1

ggplot2 ×1

ghc ×1

haskell ×1

mpi ×1

parallel-processing ×1

python ×1

r ×1

shell ×1

typeclass ×1