标签: julia

类似Fortran的数组,如Julia中的FArray(Float64,-1:1,-7:7,-128:512)

一般来说,Julia的基于1的数组是一个很好的决定,但有时候希望有类似Fortran的数组,其索引跨越some的某些子范围:

julia> x = FArray(Float64, -1:1,-7:7,-128:512)
Run Code Online (Sandbox Code Playgroud)

哪里有用:

在教程中伴随着"双曲偏微分方程的数值解"一书的代码中.John A. Trangenstein这些负指数被强烈用于鬼细胞的边界条件.对于Clawpack(代表"保护法律包"),教授也是如此.Randall J. LeVeque  http://depts.washington.edu/clawpack/  还有许多其他代码,这些指数很自然.因此,这种辅助类对于快速翻译这些代码是有用的.

我刚开始实施这样一种辅助类型,但由于我对Julia很新,所以我非常感谢你的帮助.

我开始时:

type FArray
    ranges
    array::Array
    function FArray(T, r::Range1{Int}...)
        dims = map((x) -> length(x), r)
        array = Array(T, dims)
        new(r, array)
    end
end
Run Code Online (Sandbox Code Playgroud)

输出:

julia> include ("FortranArray.jl")
julia> x = FArray(Float64, -1:1,-7:7,-128:512)
FArray((-1:1,-7:7,-128:512),3x15x641 Array{Float64,3}:
[:, :, 1] =
6.90321e-310  2.6821e-316   1.96042e-316  0.0  0.0  0.0  9.84474e-317  …  1.83233e-316  2.63285e-316  0.0           9.61618e-317  0.0        
6.90321e-310  6.32404e-322  2.63285e-316  0.0  0.0  0.0  2.63292e-316     2.67975e-316
...
[:, :, 2] =
...
Run Code Online (Sandbox Code Playgroud)

因为我对朱莉娅来说是全新的,所以任何能够提高效率的建议都会受到高度赞赏. …

arrays julia

12
推荐指数
1
解决办法
536
查看次数

如何避免toc()打印Julia过去的时间?

这可能是一个非常愚蠢的问题,但无论如何我都会继续.我正在尝试使用Julia tic()toc()循环内部来解决一些时间问题.一个虚拟的例子如下所示:

elapsedTime = zeros(3);

for i = 1:3
    tic();
    pause(i)
    ElapsedTime[i] = toc();
end 
Run Code Online (Sandbox Code Playgroud)

目标是将经过的时间间隔存储在数组中ElapsedTime.问题toc()似乎是a)将经过的时间打印到屏幕上,然后b)按需要存储它.

是否有一些简单的技巧可以避免a),即.即toc()打印出结果?这不是一个大问题,如果迭代次数很多,那就太烦人了.

任何帮助将不胜感激!

julia

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

地图,在朱莉娅用`|>`减少

在R中,dyplr您拥有%>%允许您将函数输出传递给新函数的运算符,从而无需存储中间值.在julia中,您可以通过使用|>运算符实现非常相似的功能.

用法示例

2 |> log |> sqrt 
Run Code Online (Sandbox Code Playgroud)

对我而言,这比阅读更好sqrt(log(2)).特别是当链条变得很长时.我想用这个语法,但也对map,reduce型功能朱莉娅.

建立

from = "abcdefghijklmnopqrstuvwxyz"
to   = "cdefghijklmnopqrstuvwxyzab"
trans = "g fmnc wms bgblr rpylqjyrc gr zw fylb <>"
d = {from[i] => to[i] for i = 1:26}
d[' '] = ' '
Run Code Online (Sandbox Code Playgroud)

什么有效

map(x -> d[x], filter(x -> isalpha(x) || isspace(x), trans))
Run Code Online (Sandbox Code Playgroud)

这样可行,但它读起来并不像我希望的那样好.另一种方法是将中间结果存储到变量中,但这似乎也很冗长:

res1 = filter(x -> isalpha(x) || isspace(x), trans)
map(x -> d[x], res1)
Run Code Online (Sandbox Code Playgroud)

我更喜欢什么

R语法与此类似:

trans |> 
  filter(x …
Run Code Online (Sandbox Code Playgroud)

julia

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

Julia:通过给定的字符串调用函数

朱莉娅是否像java一样支持反射?

我需要的是这样的:

str = ARGS[1] # str is a string
# invoke the function str()
Run Code Online (Sandbox Code Playgroud)

reflection julia

12
推荐指数
1
解决办法
1195
查看次数

如何索引除选择索引以外的所有索引

我有一个数组a=rand(100),我想得到除索引值之外的所有值notidx=[2;50].是否有一种干净的方式来获得a其他价值观?我正在寻找一个复制和视图的好方法.

目前我做的阵列[1;3:49;51:100]通过symdiff(1:100,notidx),但a[symdiff(1:length(a),notidx)]view(a,a[symdiff(1:length(a),notidx)])是不是很干净(或理解别人)这样做的方法.

arrays julia

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

Julia:Int与Int8对比Int64

假设我有一个n只能输入值的整数[0, 10].我应该声明它n::Int是关于它的一般性,n::Int8还是n::UInt8简约或n::Int6464位系统?

请说明新手的原因,例如风格,表现.

背景:我特林学习朱莉娅并迅速迷失在类的字眼type,immutable,syntactic sugar!我想我读过这个:https://docs.julialang.org/en/release-0.5/manual/integers-and-floating-point-numbers/

types julia

12
推荐指数
1
解决办法
1097
查看次数

Plots.jl - Turn off axis and grid lines

I am trying to make a surface plot without the axis and grid lines. I found that I can turn off the grid with grid = false but I can't find a way to remove the axis lines.

surface(x2d, y2d, z2d, fill_z = color_mat, fc = :haline, grid=false)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Thanks!

julia plots.jl

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

朱莉娅(1.3)中具有斐波那契数列的多线程并行性能问题

我正在尝试Julia 1.3使用以下硬件的多线程功能:

Model Name: MacBook Pro
Processor Name: Intel Core i7
Processor Speed:    2.8 GHz
Number of Processors:   1
Total Number of Cores:  4
L2 Cache (per Core):    256 KB
L3 Cache:   6 MB
Hyper-Threading Technology: Enabled
Memory: 16 GB
Run Code Online (Sandbox Code Playgroud)

运行以下脚本时:

function F(n)
if n < 2
    return n
    else
        return F(n-1)+F(n-2)
    end
end
@time F(43)
Run Code Online (Sandbox Code Playgroud)

它给我以下输出

2.229305 seconds (2.00 k allocations: 103.924 KiB)
433494437
Run Code Online (Sandbox Code Playgroud)

但是,当运行下面的代码从Julia页面复制的关于多线程的代码时

import Base.Threads.@spawn

function fib(n::Int)
    if n < 2 …
Run Code Online (Sandbox Code Playgroud)

multithreading fibonacci julia

12
推荐指数
1
解决办法
232
查看次数

Python 与 Julia 速度比较

我试着比较这两个片段,看看一秒钟可以完成多少次迭代。事实证明,Julia 实现了 250 万次迭代,而 Python 实现了 400 万次。朱莉娅不是应该更快吗?或者这两个片段可能不等价?

Python:

t1 = time.time()
i = 0
while True:
    i += 1
    if time.time() - t1 >= 1:
        break
Run Code Online (Sandbox Code Playgroud)

朱莉娅:

function f()
    i = 0
    t1 = now()
    while true
        i += 1
        if now() - t1 >= Base.Dates.Millisecond(1000)
            break
        end
    end
    return i
end
Run Code Online (Sandbox Code Playgroud)

python julia

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

为什么/如何确定函数何时覆盖 Julia 中的局部变量?

我对 Julia 比较陌生,正在移植一些 C 函数来检查速度差异。我正在努力解决的一个问题是变量的范围。具体来说,有时 Julia 中的函数调用会覆盖局部变量,而有时不会。例如,这是一个计算最小生成树的函数:

function mst(my_X::Array{Float64})
    n = size(my_X)[1]
    N = zeros(Int16,n,n)
    tree = []
    lv = maximum(my_X)+1
    my_X[diagind(my_X)] .=lv
    indexi = 1
    for ijk in 1:(n-1)
        tree = vcat(tree, indexi)
        m = minimum(my_X[:,tree],dims = 1)
        a = zeros(Int64, length(tree))
        print(tree)
        for k in 1:length(tree)
            a[k] = sortperm(my_X[:,tree[k]])[1,]
        end
        b = sortperm(vec(m))[1]
        indexj = tree[b]
        indexi = a[b]
        N[indexi,indexj] = 1
        N[indexj,indexi] = 1
        for j in tree
            my_X[indexi,j] = lv
            my_X[j,indexi] = lv
        end
    end
    return …
Run Code Online (Sandbox Code Playgroud)

scope julia

12
推荐指数
1
解决办法
327
查看次数

标签 统计

julia ×10

arrays ×2

fibonacci ×1

multithreading ×1

plots.jl ×1

python ×1

reflection ×1

scope ×1

types ×1