标签: julia

获取Julia Lang中的当前变量列表

我是Julia Lang的新手.我来自Matlab的背景.

在Matlab中,当按下whos命令时我将获得当前范围内的所有变量; 而且,我可以将它们存储在另一个变量中x=whos;,例如Julia中是否存在这样的命令?Matlab中的示例代码:

>> a=3;
>> b=4;
>> whos
Variables in the current scope:

Attr Name        Size                     Bytes  Class
==== ====        ====                     =====  ===== 
    a            1x1                          8  double
    b            1x1                          8  double
    prefix       1x16                        16  char

Total is 18 elements using 32 bytes.
Run Code Online (Sandbox Code Playgroud)

julia

46
推荐指数
4
解决办法
8912
查看次数

Julia语言真的和它声称的一样快吗?

这篇文章之后,我决定将Julia与GNU Octave进行比较,结果与julialang.org中的加速结果不一致.

我编译了Julia和GNU Octave CXXFLAGS='-std=c++11 -O3',结果我得到了:

GNU Octave

a=0.9999;

tic;y=a.^(1:10000);toc
Elapsed time is 0.000159025 seconds.

tic;y=a.^(1:10000);toc
Elapsed time is 0.000162125 seconds.

tic;y=a.^(1:10000);toc
Elapsed time is 0.000159979 seconds.
Run Code Online (Sandbox Code Playgroud)

-

tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000280142 seconds.

tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000280142 seconds.

tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000277996 seconds.
Run Code Online (Sandbox Code Playgroud)

朱莉娅

tic();y=a.^(1:10000);toc()
elapsed time: 0.003486508 seconds

tic();y=a.^(1:10000);toc()
elapsed time: 0.003909662 seconds

tic();y=a.^(1:10000);toc()
elapsed time: 0.003465313 seconds
Run Code Online (Sandbox Code Playgroud)

-

tic();y=cumprod(ones(1,10000)*a);toc()
elapsed time: 0.001692931 seconds

tic();y=cumprod(ones(1,10000)*a);toc()
elapsed time: 0.001690245 seconds

tic();y=cumprod(ones(1,10000)*a);toc()
elapsed …
Run Code Online (Sandbox Code Playgroud)

benchmarking octave julia

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

Julia 中的 firstindex 有什么意义?

从文档中它说firstindex()找到集合的第一个索引。为什么不只使用 1?当它不是 1 时会出现什么情况?

julia

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

在行上迭代矩阵的推荐方法是什么?

给定一个矩阵m = [10i+j for i=1:3, j=1:4],我可以通过切割矩阵迭代它的行:

for i=1:size(m,1)
    print(m[i,:])
end
Run Code Online (Sandbox Code Playgroud)

这是唯一的可能吗?这是推荐的方式吗?

那么理解呢?切片是否只能迭代矩阵的行?

[ sum(m[i,:]) for i=1:size(m,1) ]
Run Code Online (Sandbox Code Playgroud)

julia

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

朱莉娅:OOP与否

我和Julia一起在朱诺工作.

我不知道朱莉娅是否支持OOP.

例如,是否有类似classstructC++的?

如何使用数据或函数等成员声明它?

oop struct class julia

41
推荐指数
4
解决办法
2万
查看次数

为什么在 Float64 上运行比 Float16 快?

我想知道为什么对Float64值进行操作比对 进行操作更快Float16

\n
julia> rnd64 = rand(Float64, 1000);\n\njulia> rnd16 = rand(Float16, 1000);\n\njulia> @benchmark rnd64.^2\nBenchmarkTools.Trial: 10000 samples with 10 evaluations.\n Range (min \xe2\x80\xa6 max):  1.800 \xce\xbcs \xe2\x80\xa6 662.140 \xce\xbcs  \xe2\x94\x8a GC (min \xe2\x80\xa6 max):  0.00% \xe2\x80\xa6 99.37%\n Time  (median):     2.180 \xce\xbcs               \xe2\x94\x8a GC (median):     0.00%\n Time  (mean \xc2\xb1 \xcf\x83):   3.457 \xce\xbcs \xc2\xb1  13.176 \xce\xbcs  \xe2\x94\x8a GC (mean \xc2\xb1 \xcf\x83):  12.34% \xc2\xb1  3.89%\n\n  \xe2\x96\x81\xe2\x96\x88\xe2\x96\x88\xe2\x96\x84\xe2\x96\x82\xe2\x96\x82\xe2\x96\x86\xe2\x96\x86\xe2\x96\x84\xe2\x96\x82\xe2\x96\x81 \xe2\x96\x82\xe2\x96\x86\xe2\x96\x84\xe2\x96\x81                                     \xe2\x96\x82\xe2\x96\x82\xe2\x96\x82\xe2\x96\x81   \xe2\x96\x82\n  \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x87\xe2\x96\x87\xe2\x96\x86\xe2\x96\x86\xe2\x96\x87\xe2\x96\x86\xe2\x96\x85\xe2\x96\x87\xe2\x96\x88\xe2\x96\x88\xe2\x96\x86\xe2\x96\x86\xe2\x96\x85\xe2\x96\x85\xe2\x96\x86\xe2\x96\x84\xe2\x96\x84\xe2\x96\x81\xe2\x96\x81\xe2\x96\x83\xe2\x96\x83\xe2\x96\x81\xe2\x96\x81\xe2\x96\x84\xe2\x96\x81\xe2\x96\x83\xe2\x96\x84\xe2\x96\x81\xe2\x96\x83\xe2\x96\x81\xe2\x96\x84\xe2\x96\x83\xe2\x96\x81\xe2\x96\x81\xe2\x96\x86\xe2\x96\x87\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x87 \xe2\x96\x88\n  1.8 \xce\xbcs       Histogram: log(frequency) by time      10.6 \xce\xbcs <\n\n …
Run Code Online (Sandbox Code Playgroud)

performance julia half-precision-float

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

如何将Julia升级到新版本?

问题1 - 升级

v"0.3.8"在Windows上使用.我找到了

http://julialang.org/downloads/

Current Release (v0.3.9)
Run Code Online (Sandbox Code Playgroud)

我知道我可以下载prebuild版本并重新安装.有没有办法升级(从当前安装的版本)到新版本?

Pkg.update(),它运行很长一段时间没有任何输出 - 它不能以这种方式工作.

从文档:

update()更新包元数据仓库 - 保存在Pkg.dir("METADATA")中 - 然后更新任何可以安全地从其来源拉出的固定包; 然后调用Pkg.resolve()来确定一组新的最佳软件包版本.

因此,它不是升级语言本身的正确工具.

问题2 - 发行说明

是否有ReleaseNoteChangeList这样的东西?或者重大改变的任何亮点?

(我知道语言还没有达到v1.0.如果有一个地方可以找到重大改变/改进,那就很好.如果没有,那很好.)

julia

37
推荐指数
3
解决办法
3万
查看次数

如何在处理多种类型和数组时编写"好"的Julia代码(多次调度)

我是朱莉娅的新手,鉴于我的Matlab起源,我在确定如何编写利用多个调度和Julia的类型系统的"好"Julia代码时遇到了一些困难.

考虑我有一个提供a的平方的函数的情况Float64.我可以这样写:

function mysquare(x::Float64)
    return(x^2);
end
Run Code Online (Sandbox Code Playgroud)

有时,我想Float64在一维数组中对所有s 进行平方,但不想mysquare每次都写出一个循环,所以我使用多次调度并添加以下内容:

function mysquare(x::Array{Float64, 1})
    y = Array(Float64, length(x));
    for k = 1:length(x)
        y[k] = x[k]^2;
    end
    return(y);
end
Run Code Online (Sandbox Code Playgroud)

但是现在我有时正在使用Int64,所以我写了两个利用多个调度的函数:

function mysquare(x::Int64)
    return(x^2);
end
function mysquare(x::Array{Int64, 1})
    y = Array(Float64, length(x));
    for k = 1:length(x)
        y[k] = x[k]^2;
    end
    return(y);
end
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?或者是否有更具思想性的方法来应对这种情况?我应该使用这样的类型参数吗?

function mysquare{T<:Number}(x::T)
    return(x^2);
end
function mysquare{T<:Number}(x::Array{T, 1})
    y = Array(Float64, length(x));
    for k = 1:length(x)
        y[k] = x[k]^2;
    end
    return(y);
end
Run Code Online (Sandbox Code Playgroud)

这感觉很合理,但我的代码运行速度会与避免参数类型的情况一样快吗?

总之,我的问题分为两部分:

  1. 如果快速代码对我很重要,我应该如上所述使用参数类型,还是应该为不同的具体类型写出多个版本?或者我应该完全做其他事情? …

arrays types multiple-dispatch julia

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

在什么意义上,像Elixir和Julia homoiconic这样的语言?

Lisp中的同质性很容易看出:

(+ 1 2)

既是函数调用+1,2作为参数,以及作为含有一个列表+,12.它同时是代码和数据.

但是,像朱莉娅这样的语言:

1 + 2

我知道我们可以Expr在Julia中将其解析为:

:(1 + 2)

然后我们可以获得AST并操纵它:

julia> Meta.show_sexpr(:(1+2)) (:call, :+, 1, 2)

因此,我们可以在Julia(和Elixir)中操纵程序的AST.但它们是否与Lisp一样具有同音性 - 任何代码片段实际上只是语言本身的数据结构吗?

我不知道1 + 2Julia中的代码是如何立即像(+ 1 2)Lisp中的数据一样只是一个列表.它仍然是杀人的吗?

lisp homoiconicity julia

36
推荐指数
1
解决办法
4434
查看次数

朱莉娅(Julia-lang)表现与Fortran和Python相比

我调整了一个简单的程序来计算和绘制Julia的运动漩涡以测试语言,我也用Python编写它没有特别的原因.

(免责声明:1.我读过的stackoverflow的每一次性能比较都因为没有全面/正确/写得好/相关等等而受到抨击 - 我不是假装这是一个真正的比较,我只想知道如何制作朱莉娅更快.2.我知道python可以优化,在Cython等中实现,这不是讨论的一部分,它只是在这里为Julia和Python中的等效函数的参考.)

代码和性能结果可以在一个要点中看到.

Julia的表现明显慢于Fortran.执行计算所花费的时间是(50000个时间步长):

Fortran: 0.051s
Julia: 2.256s
Python: 30.846s
Run Code Online (Sandbox Code Playgroud)

朱莉娅比Fortran慢得多(慢44倍),差距缩小但仍然显着,时间步长增加10倍(0.50s vs 15.24s).

这些结果与julia主页上显示的结果有很大不同.我究竟做错了什么?我可以修快朱莉娅吗?

我在Julia主页上浏览了Julia Performance Tips页面和比较背后的代码,没有什么能让我解决.

同样有趣的是,Julia加载PyPlot(5secsish !!)非常慢,而且比Python读取文本文件要慢得多.我可以做些什么来改善这些事情吗?

请注意,上面的时间不显示Julia和Python的加载时间,它只是计算AFAIK所需的原始时间 - 请参阅代码.对于fortran来说,这就是整个事情.在每种情况下,绘图都已大致关闭以允许速度比较.

计算机:Intel i7-3770,16GB RAM,SSD HD,操作系统:Ubuntu 13.10 64bit.,Fortran:gfortran,GNU Fortran(Ubuntu/Linaro 4.8.1-10ubuntu9)4.8.1,Julia:版本0.3.0-prerelease + 396 (2013-12-12 00:18 UTC),提交c5364db*(0天大师),x86_64-linux-gnu,Python:2.7.5+


更新:

根据ivarne的建议,我重新编写了Julia脚本(在上面的gist中更新):在函数中封装grunt工作,声明所有内容的类型,并在适用的情况下将矩阵的不同元素拆分为不同的数组.(我在很多地方都包含了Float64,因为我尝试了Float32,看看是否有帮助,但大部分时间都没有).

结果如下:

50,000 时间步骤:

Fortran: 0.051s (entire programme)
Julia: raw calc.: 0.201s, calc. and return (?): 0.758s, total exec.: 6.947s
Run Code Online (Sandbox Code Playgroud)

500,000 时间步骤:

Fortran: 0.495s (entire programme)
Julia: raw calc.: 1.547s, …
Run Code Online (Sandbox Code Playgroud)

performance fortran fortran77 julia

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