我喜欢在Emacs中进行Scala开发,并且不时地使用REPL来测试代码片段或者加载和测试我刚刚编写的一些代码.我正在使用Scala 2.9.1,我注意到当我在终端缓冲区中打开REPL时,事情基本上已被破坏.特别是,我无法从当前行中删除任何字符,并且无法在当前行上向后移动光标.这是非常令人沮丧的,因为任何时候我输入错误的东西,我必须重新开始命令.我想知道是否有其他人在使用Emacs下的Scala REPL时遇到此问题,并且如果有人有潜在的解决方案.
我正在尝试将一些Python代码移植到Scala.它大量使用Numpy和Scipy.虽然我发现了许多密集矩阵/线性代数库,它们可以作为NumPy的一个适当的(但不是极好的)替代品,但我还没有找到任何提供我在SciPy中使用的功能的东西.特别是,我正在寻找支持稀疏部分特征分解的库(比如SciPy包装的arpack),然后是SciPy提供的一些简单事物的库(例如直方图).
我正在寻找Scala的命令行解析器,支持子命令(类似于Python中的argparse).看起来Scala(Scopt,Argot等)有许多不同的命令行解析器,但它们似乎都不支持子命令解析.我只是错过了这些其他库支持子命令的事实,如果没有,是否存在任何此类库?
我正在尝试在Scala中构建嵌套映射,其中外部和内部映射都使用"withDefaultValue"方法.例如,以下内容:
val m = HashMap.empty[Int, collection.mutable.Map[Int,Int]].withDefaultValue( HashMap.empty[Int,Int].withDefaultValue(3))
m(1)(2)
res: Int = 3
m(1)(2) = 5
m(1)(2)
res: Int = 5
m(2)(3) = 6
m
res : scala.collection.mutable.Map[Int,scala.collection.mutable.Map[Int,Int]] = Map()
Run Code Online (Sandbox Code Playgroud)
因此,当用适当的键解决时,地图会让我回到原来的位置.然而,地图本身看起来是空的!在这个例子中,甚至m.size返回0.谁能解释一下这里发生了什么?
我正在尝试描述一个多线程程序,我在一台大型机器(32核,256GB RAM)上编写.我注意到在运行之间,程序的性能可能会有很大差异(70-80%).我似乎无法找到程序性能中这种巨大差异的原因,但通过分析大量运行中"时间"效用的结果,我注意到非自愿上下文切换的数量与程序性能(显然,较少的上下文切换导致更好的性能,反之亦然).
有没有什么好方法可以确定导致此上下文切换的原因?如果我能发现罪魁祸首,那么也许我可以尝试解决问题.但是,我对可以使用的工具有一些特殊的限制.首先,我没有机器上的root权限,因此任何需要此类权限的工具都没有.其次,它是一个相当老的内核(RHEL5,内核2.6.18),因此可能不存在一些标准的perf事件.无论如何,任何关于如何更深入地了解这种情境转换的原因的建议将不胜感激.
更新:我决定在另一台(和更小的)机器上测试我的程序.另一台机器是一个带有8Gb RAM的4核(带有高速)linux盒子,另一台机器上有一个更新的内核--- 3.2.0和2.6.18.在新机器上,我无法重现双模式性能配置文件.这让我相信这个问题要么是因为硬件问题(如评论中所建议的),要么是内核级别的特定病态情况,这个问题已经得到修复.我目前最好的假设是,它可能是因为新机器具有完全公平调度程序(CFS)的内核而旧机器没有.有没有办法测试这个假设(告诉新机器使用不同的/旧的调度程序)而不必重新编译新机器的古老内核版本?
我正在看原始论文图3中给出的伪代码,它引入了后缀数组"SUFFIX ARRAYS:一种新的在线字符串搜索方法".
我无法弄清楚第4行和第5行的逻辑(从0开始索引).这些内容如下:
否则,如果 ř<P或瓦特 - [R ≤一个 POS [N-1] + R 然后
大号 W¯¯ ←Ñ
W是一个长度为"P"的,我们正在寻找和模式r是lcp(A[pos[N-1]:], W).问题是,在几乎所有情况下,这lcp将小于'W'的长度.这个条件是为了处理这种情况(我认为),该模式在字典上大于数组中按字典顺序排列的最大后缀,但它根本不测试这个.另一方面,第2和第3行测试是否W小于词典上最小的后缀似乎很有意义
如果升= P或瓦特升 ≤一个 POS [0] + 1 然后
大号 W¯¯ ←0
我相信原始的行应该是这样的:
否则如果 r <P且 w r > a Pos [N-1] + r 则
L W ←N.
唯一W可以大于A[pos[N-1]:]它的方式是它是否lcp比模式的长度短(否则,所有W匹配W都不能更大,只有更小或等于我们共享的东西lcp)和如果之后的字符lcp是更大的W比 …
我在二分图中搜索最大权重/最小成本匹配的Python代码.我一直在使用NetworkX中的一般情况最大权重匹配代码,但我发现它对我的需求来说太慢了.这可能是由于通用算法速度较慢以及NetworkX解决方案完全用Python实现的事实.理想情况下,我想为包含一些C/C++代码的二分匹配问题找到一些Python代码,但是现在,任何比NetworkX实现更快的东西都会有所帮助.
我正在研究一个项目(在Scala中),我需要操作一些非常大的数字; 太大而不能用积分类型来表示.Java提供了BigInteger和BigDecimal类(scala提供了一个很好的瘦包装器).但是,我注意到这些库比我过去使用的其他任意精度库(即http://www.ginac.de/CLN/)慢得多,并且速度差异似乎大于可归因的值仅靠语言.
我对我的程序进行了一些分析,并且44%的执行时间用于BigInteger乘法方法.我想加快我的程序,所以我正在寻找比BigInteger类(及其Scala包装器)更快更有效的选项.我看过LargeInteger(来自JScience)和Aint(来自Afloat).但是,两者似乎都比标准的BigInteger类执行得慢.
有没有人知道Java(或在JVM上可用)任意精度数学库,重点是高性能整数乘法和加法?
我目前正在开发一个项目,该项目使用有向超图框架枚举动态程序的k-best解决方案.我当前的实现(在Python中)运行良好,但速度相当慢.该算法执行许多紧密循环和相当多的递归.我真的认为我可以使用C++实现实现显着的速度提升.然而,经过一段时间的搜索,我无法找到任何在C++中提供超图实现的库(特别是有向超图 - 但我甚至无法找到无向超图的库).有谁知道这样的图书馆?几年前似乎有一个GSoC提议将超图支持提升,但它看起来并没有真正成功.
我正在尝试使用最新的Xcode cmd行工具在OSX 10.10中编译一些代码.编译工作,但链接是一个噩梦.首先,我得到一个符号被多次定义的错误.此错误是正确的,但定义是相同的,并且在我无法控制的第三方库中.我无法弄清楚如何强制链接器忽略此问题.一个重要的注意事项是,相同的代码在我的Ubuntu盒子上,在clang和gcc下完美地编译,链接和运行.此链接器问题仅在OS X下.库是静态的.
我遇到的第二个问题甚至更奇怪.如果我删除一些(必要的)功能只是为了我可以编译和链接程序,我运行它时得到以下有趣的消息:"dyld:未找到符号:__ ZNSt12future_errorD1Ev".到底是怎么回事,我该怎么办呢?谷歌在这方面没有任何帮助.
我正在尝试使用Scala的清单来实例化一个类型,并且当在具有视图绑定的类型上对该类型进行参数化时,我遇到了问题.我已将问题归结为以下代码:
class foo[X <% Ordered[X]]() {}
def boo[T](implicit m : Manifest[T]) = { m.erasure.newInstance().asInstanceOf[T] }
boo[foo[String]]
java.lang.InstantiationException: foo
at java.lang.Class.newInstance0(Class.java:357)
at java.lang.Class.newInstance(Class.java:325)
. . .
Run Code Online (Sandbox Code Playgroud)
所以你可以看到我们有一个简单的类foo,它在X上参数化; 这是由Ordered [X]限定的视图.boo函数只是尝试使用清单来实例化foo [String]的新实例.然而,当调用这个函数时,事情会非常糟糕,我得到的堆栈跟踪就像我展示的那样开始.当foo的类型参数不是视图有界时,实例化工作没有问题.我假设这与视图绑定只是存在X => Ordered [X]的隐式转换的语法糖这一事实有关,并且某种方式依赖于另一个清单的清单导致了问题.但是,我不知道发生了什么,或者更重要的是,如何解决它.这在Scala中是否可能,如果不是,人们如何实现类似的东西呢?
我想在编译时跟踪当前采用相同类型参数的一些函数的"类型"信息.这是一个例子; 说我有两个功能getThingIndex(uint64_t t)和getThingAtIndex(uint64_t tidx).第一个函数将参数视为一个编码,对thing索引进行非平凡的计算,然后返回它.然后可以通过调用获得实际的"事物" getThingAtIndex.getThingAtIndex另一方面,假设您正在查询结构并且已经有索引.这两种方法的后者速度更快,而且更重要的是,我想避免可能造成的传递头痛thing到getThingAtIndex或通过传递index来getThingIndex.
我正在考虑创建类型thing和事物索引类似如下:
struct Thing { uint64_t thing; }
struct ThingIndex { uint64_t idx; }
Run Code Online (Sandbox Code Playgroud)
然后改变上面函数的签名
getThingIndex(Thing t)
getThingAtIndex(ThingIndex idx)
Run Code Online (Sandbox Code Playgroud)
现在,尽管事实上Thing并ThingIndex编码了相同的底层类型,但它们在编译时仍然是不同的,并且我通过将索引传递给getThingIndex某个东西来制造愚蠢错误的机会较少
getThingAtIndex.
但是,我担心这种方法的开销.这些函数被称为很多次(10s-100s,数百万次),我很好奇编译器是否会优化这些结构的创建,这些结构基本上只对编译时类型信息进行编码.如果编译器不会执行这样的优化,有没有办法创建这些类型的"富类型",零开销?
scala ×6
c++ ×5
algorithm ×2
graph ×2
java ×2
biginteger ×1
clang ×1
compile-time ×1
default ×1
emacs ×1
manifest ×1
map ×1
numeric ×1
numpy ×1
optimization ×1
overhead ×1
parsing ×1
performance ×1
picocli ×1
profiling ×1
pseudocode ×1
python ×1
reflection ×1
scipy ×1
struct ×1
suffix-array ×1
type-erasure ×1
view-bound ×1
xcode5 ×1