Julia是一种新的统计编程语言,其声称性能明显优于竞争语言.我正试图验证这一点.Julia有一个用Python编写的性能测试:https: //github.com/JuliaLang/julia/blob/master/test/perf/perf.py
我不能让它与pypy一起工作.也许这是因为numpypy与numpy不兼容,但我还没有达到足够的程度来确定这一点.我按照ImportError建议,"...or just write 'import numpypy' first in your program..."
但我得到另一个ImportError:"No module named numpy.linalg"
我对Python几乎没有经验,我正在寻找一个可以运行的完整解决方案.让它发挥作用的好处是我们可以进行一对一(jit lang-to-jit lang)比较.
我知道浮点数学最多可能是丑陋的,但我想知道是否有人可以解释以下的怪癖.在我测试的大多数编程语言中,0.4到0.2的加法给出了轻微的误差,其中0.4 + 0.1 + 0.1给出了非.
是什么原因导致计算的不平等以及可以在各自的编程语言中采取哪些措施来获得正确的结果.
在python2/3中
.4 + .2
0.6000000000000001
.4 + .1 + .1
0.6
Run Code Online (Sandbox Code Playgroud)
Julia 0.3也是如此
julia> .4 + .2
0.6000000000000001
julia> .4 + .1 + .1
0.6
Run Code Online (Sandbox Code Playgroud)
和斯卡拉:
scala> 0.4 + 0.2
res0: Double = 0.6000000000000001
scala> 0.4 + 0.1 + 0.1
res1: Double = 0.6
Run Code Online (Sandbox Code Playgroud)
和哈斯克尔:
Prelude> 0.4 + 0.2
0.6000000000000001
Prelude> 0.4 + 0.1 + 0.1
0.6
Run Code Online (Sandbox Code Playgroud)
但是R v3是正确的:
> .4 + .2
[1] 0.6
> .4 + .1 + .1
[1] 0.6
Run Code Online (Sandbox Code Playgroud) 与Python相比,阅读Julia中的大文本/ csv文件需要很长时间.以下是读取大小为486.6 MB且包含153895行和644列的文件的时间.
python 3.3的例子
import pandas as pd
import time
start=time.time()
myData=pd.read_csv("C:\\myFile.txt",sep="|",header=None,low_memory=False)
print(time.time()-start)
Output: 19.90
Run Code Online (Sandbox Code Playgroud)
R 3.0.2示例
system.time(myData<-read.delim("C:/myFile.txt",sep="|",header=F,
stringsAsFactors=F,na.strings=""))
Output:
User System Elapsed
181.13 1.07 182.32
Run Code Online (Sandbox Code Playgroud)
Julia 0.2.0(Julia Studio 0.4.4)示例#1
using DataFrames
timing = @time myData = readtable("C:/myFile.txt",separator='|',header=false)
Output:
elapsed time: 80.35 seconds (10319624244 bytes allocated)
Run Code Online (Sandbox Code Playgroud)
Julia 0.2.0(Julia Studio 0.4.4)示例#2
timing = @time myData = readdlm("C:/myFile.txt",'|',header=false)
Output:
elapsed time: 65.96 seconds (9087413564 bytes allocated)
Run Code Online (Sandbox Code Playgroud)
Julia比R快,但与Python相比相当慢.我可以做些什么来加快阅读大文本文件的速度?
另一个问题是内存中的大小是Julia中硬盘文件大小的18倍,但是python只有2.5倍大小.在Matlab中,我发现它对于大文件来说是最有效的内存,它是2 x大小的硬盘文件大小.Julia内存中文件大小的任何特殊原因?
我已经阅读了和宏的文档,但仍然无法弄清楚如何以及何时使用它们,也无法在互联网上的其他地方找到许多资源或示例. @async
@sync
我的直接目标是找到一种方法来设置几个工作程序并行工作,然后等待它们全部完成后继续我的代码.这篇文章:等待在Julia的远程处理器上完成的任务包含一个成功的方法来实现这一点.我原以为应该可以使用@async
和@sync
宏,但是我最初的失败让我想知道我是否正确理解了如何以及何时使用这些宏.
parallel-processing macros synchronization asynchronous julia
基本上我的情况就是这个.我有一个模块(也导入了许多其他模块).
我有一个脚本,如:
import MyModule
tic()
MyModule.main()
tic()
MyModule.main()
Run Code Online (Sandbox Code Playgroud)
在MyModule中:
__precompile__()
module MyModule
export main
function main()
toc()
...
end
end
Run Code Online (Sandbox Code Playgroud)
第一个toc()
呼叫输出大约20秒.第二个输出2.3e-5.任何人都可以猜测时间的去向吗?Julia是否在第一次调用模块时进行某种初始化,我怎么能弄清楚它是什么?
我想计算一个二次形式:x' Q y
在 Julia 中。
对于这种情况,计算此值的最有效方法是什么:
Q
是对称的。x
和y
相同(x = y
)。Q
都是对称的并且x = y
.我知道朱莉娅有dot()
。但我想知道它是否比 BLAS 调用更快。
我正在尝试使用Julia解析大量文本文件,并且我想循环遍历文件名数组,而不是键入函数调用来单独读取每个文件.到目前为止,我一直无法找到一种方法来搜索文件夹中与模式匹配的文件.
是否有一个基础库Julia函数,它将返回给定文件夹中的所有文件名,匹配给定的字符串模式?
R中的等效函数是list.files()
,如果这有助于传达我想要的东西.
我只是想 在Matplotlib中重现这个简单的动画示例,但在Julia中使用PyPlot.我对simData()
传递给函数的迭代器的定义有困难funcAnimation
,因为似乎PyPlot不能识别我在Julia中定义的迭代器(通过Task).
这是我定义相同功能的方法simData()
:
function simData()
t_max = 10.0
dt = 0.05
x = 0.0
t = 0.0
function it()
while t < t_max
x = sin(pi*t)
t = t+dt
produce(x,t)
end
end
Task(it)
end
Run Code Online (Sandbox Code Playgroud)
正如您可以检查的那样,这种迭代器在理论上产生的值simData()
与示例中的python 生成器相同(例如尝试collect(simData())
.但是,当我尝试动画时出现此错误
LoadError: PyError (:PyObject_Call) <type 'exceptions.TypeError'>
TypeError('PyCall.jlwrap object is not an iterator',)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 1067, in __init__
TimedAnimation.__init__(self, fig, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 913, in __init__
*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", …
Run Code Online (Sandbox Code Playgroud) 在浏览julia时,我想要一个类似于python dis
模块的功能.通过网络,我发现Julia社区已经解决了这个问题并给出了这些(https://github.com/JuliaLang/julia/issues/218)
finfer -> code_typed
methods(function, types) -> code_lowered
disassemble(function, types, true) -> code_native
disassemble(function, types, false) -> code_llvm
Run Code Online (Sandbox Code Playgroud)
我亲自使用Julia REPL尝试了这些,但我似乎很难理解.
在Python中,我可以反汇编这样的函数.
>>> import dis
>>> dis.dis(lambda x: 2*x)
1 0 LOAD_CONST 1 (2)
3 LOAD_FAST 0 (x)
6 BINARY_MULTIPLY
7 RETURN_VALUE
>>>
Run Code Online (Sandbox Code Playgroud)
任何使用过这些东西的人都可以帮助我更多地理解它们吗?谢谢.
Julia具有setter函数setproperty!
和setfield!
getter函数getproperty
,getfield
并且在结构上运行。Julia中的属性和字段之间有什么区别?
例如,以下内容似乎表明它们执行相同的操作:
julia> mutable struct S
a
end
julia> s = S(2)
S(2)
julia> getfield(s, :a)
2
julia> getproperty(s, :a)
2
julia> setfield!(s, :a, 3)
3
julia> s
S(3)
julia> setproperty!(s, :a, 4)
4
julia> s
S(4)
Run Code Online (Sandbox Code Playgroud) julia ×10
python ×3
performance ×2
animation ×1
asynchronous ×1
haskell ×1
macros ×1
matplotlib ×1
numpy ×1
pypy ×1
python-2.7 ×1
r ×1