标签: julia

Julia:如何漂亮地打印一个数组?

a= zeros(4,4)
Run Code Online (Sandbox Code Playgroud)

a像这样打印

> 4×4 Array{Float64,2}:
>  0.0  0.0  0.0  0.0
>  0.0  0.0  0.0  0.0
>  0.0  0.0  0.0  0.0
>  0.0  0.0  0.0  0.0
Run Code Online (Sandbox Code Playgroud)

println(a)像这样打印

[0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0]
Run Code Online (Sandbox Code Playgroud)

如何a在函数中以前一种方式“打印” ?我想要它用于调试目的。

julia

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

试图找到一种方法来构建朱莉娅`generator'

我是朱莉娅的新手.我主要在python中编程.

在python中,如果要迭代一大组值,通常会构造一个所谓的生成器来节省内存使用量.这是一个示例代码:

def generator(N):
    for i in range(N):
        yield i
Run Code Online (Sandbox Code Playgroud)

我想知道朱莉娅是否有类似的东西.阅读julia手册后,@ task macro似乎与python中的生成器具有相同(或类似)的功能.然而,经过一些实验,在julia中,内存使用量似乎比通常的数组大.

@time在IJulia中使用来查看内存使用情况.这是我的示例代码:

[更新]:添加generator方法代码
(generator方法)

function generator(N::Int)
    for i in 1:N
        produce(i)
    end
end
Run Code Online (Sandbox Code Playgroud)

(发电机版)

function fun_gener()
    sum = 0
    g = @task generator(100000)
    for i in g
        sum += i
    end
    sum
 end
Run Code Online (Sandbox Code Playgroud)

@time fun_gener()
已用时间:0.420731828秒(已分配6507600字节)

(阵列版)

function fun_arry()
    sum = 0
    c = [1:100000]
    for i in c
        sum += i
    end
    sum
end
Run Code Online (Sandbox Code Playgroud)

@time fun_arry()
已用时间:0.000629629秒(已分配800144个字节)

谁能告诉我为什么@task在这种情况下需要更多空间?如果我想将内存使用量保存为处理大量值,我该怎么办?

generator julia

17
推荐指数
3
解决办法
2855
查看次数

使用=运算符在Julia中创建副本

当我创建一些数组A并将其分配给B时

A = [1:10]
B = A
Run Code Online (Sandbox Code Playgroud)

我可以修改A,更改反映在B中

A[1] = 42
# B[1] is now 42
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用标量变量执行此操作,则更改不会传播:

a = 1
b = a
a = 2
# b remains being 1
Run Code Online (Sandbox Code Playgroud)

我甚至可以将事物混合起来并将矢量转换为标量,并且变化不会传播:

A = [1:10]
B = A
A = 0
# B remains being 1,2,...,10
Run Code Online (Sandbox Code Playgroud)

=运营商究竟做了什么?当我要复制的变量和修改旧的保存新变量的完整性,当我应该使用b = copy(a)经过短短b=a

julia

17
推荐指数
1
解决办法
2301
查看次数

Julia中是否存在类似Python的virtualenv?

是否有适用于Julia的类似Python的virtualenv环境模拟器,可以在本地虚拟环境中进行开发?

julia

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

删除julia数组中的元素

我已经在文档和论坛中徘徊了一段时间,我还没有找到一个内置的方法/函数来完成删除数组中元素的简单任务.有这样的内置功能吗?

我要求相当于python的list.remove(x).

这是一个天真地从框中选择一个函数的例子:

julia> a=Any["D","A","s","t"]
julia> pop!(a, "s")
ERROR: MethodError: `pop!` has no method matching       
pop!(::Array{Any,1},     ::ASCIIString)
Closest candidates are:
  pop!(::Array{T,1})
  pop!(::ObjectIdDict, ::ANY, ::ANY)
  pop!(::ObjectIdDict, ::ANY)
  ...
Run Code Online (Sandbox Code Playgroud)

这里提到使用 deleteat!,但也不起作用:

julia> deleteat!(a, "s")
ERROR: MethodError: `-` has no method matching -(::Int64, ::Char)
Closest candidates are:
  -(::Int64)
  -(::Int64, ::Int64)
  -(::Real, ::Complex{T<:Real})
  ...

 in deleteat! at array.jl:621
Run Code Online (Sandbox Code Playgroud)

arrays julia

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

更改Julia中的Package目录

我想更改Julia中的Package目录.默认是

"~/.julia/v0.4"
Run Code Online (Sandbox Code Playgroud)

我想移动/opt/julia/v0.4/.理想情况下,我想将已安装的软件包移动~/.julia/v0.4到新位置.但如果不可能,我可以重新安装它们.

我需要做什么?

julia

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

朱莉娅 - @ inline如何运作?何时使用功能与宏?

我有许多小函数我想内联,例如测试某些条件的标志:

const COND = UInt(1<<BITS_FOR_COND)
function is_cond(flags::UInt)
    return flags & COND != 0
end
Run Code Online (Sandbox Code Playgroud)

我也可以做一个宏:

macro IS_COND(flags::UInt)
    return :(flags & COND != 0)
end
Run Code Online (Sandbox Code Playgroud)

我的动机是我正在使用的C代码中的许多类似的宏函数:

#define IS_COND(flags) ((flags) & COND)
Run Code Online (Sandbox Code Playgroud)

我反复计时使用@inline定义的函数,宏,函数和表达式,但是在许多运行中没有一个比其他函数更快.1)和3)中函数调用的生成代码比4)中的表达式长得多,但我不知道如何比较2)因为@code_llvm等等不适用于其他宏.

1) for j=1:10 @time for i::UInt=1:10000 is_cond(i); end end
2) for j=1:10 @time for i::UInt=1:10000 @IS_COND(i); end end
3) for j=1:10 @time for i::UInt=1:10000 is_cond_inlined(i); end end
4) for j=1:10 @time for i::UInt=1:10000 i & COND != 0; end end
Run Code Online (Sandbox Code Playgroud)

问题:目的是@inline什么?我从稀疏文档中看到它将符号附加:inline到表达式:meta,但这究竟是做什么的呢?有没有理由更喜欢这种任务的函数或宏? …

julia

17
推荐指数
1
解决办法
3012
查看次数

缓存Julia模块,以便在Python中更快地启动和使用

我有一个Julia模块,我需要从我的python代码库接口.为此我pyjulia就是这样使用的.

import julia

j = julia.Julia()
j.include('./simulation/n-dof/dynamics.jl')
j.using("Dynamics")
print(j.sim([1,2,3],[1,2,3]))
Run Code Online (Sandbox Code Playgroud)

然而,由于Julia需要编译我正在使用的模块,这会减慢一切.

我使用的模块导出1个函数,并在内部ForwardDiff用于某些计算.它计算动态系统的导数.在可预见的未来,该模块很可能不会发生变化.我一直在阅读__precompile()__,PackageCompiler.jl但我不太了解内部工作原理以及如何使用它.

那么有没有办法在Julia系统映像中缓存模块(据我所知,这就是为什么干净的Julia启动很快)?或者将它编译为二进制文件然后以某种方式通过python调用它更好?我需要能够将参数传递给导出的函数.

我用于测试的动力学模块的一个例子:

module Dynamics
    function sim(a,b)
        return 1
    end

    export sim

end
Run Code Online (Sandbox Code Playgroud)

python julia

17
推荐指数
1
解决办法
523
查看次数

如何将元组作为函数参数传递

有一个函数,需要三个参数.

f(a, b, c) = # do stuff
Run Code Online (Sandbox Code Playgroud)

还有另一个返回元组的函数.

g() = (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

如何将元组作为函数参数传递?

f(g()) # ERROR
Run Code Online (Sandbox Code Playgroud)

julia

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

Julia DataFrame:按名称删除列

Julia中的DataFrame类型允许您以数组形式访问它,因此可以通过索引删除列:

df = df[:,[1:2,4:end]] # remove column 3
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我经常只知道列的名称,而不知道表中的列索引.

有没有按名称删除列的内置方法?

或者,有没有比这更好的方法呢?

colind = findfirst(names(df), colsymbol)
df = df[:,[1:colind-1,colind+1:end]]
Run Code Online (Sandbox Code Playgroud)

以上是容易出错的; 有一些边缘情况(单列,第一列,最后一列,符号不在表中等)

谢谢

dataframe julia

16
推荐指数
3
解决办法
7643
查看次数

标签 统计

julia ×10

arrays ×1

dataframe ×1

generator ×1

python ×1