标签: julia

从URL读取数据

是否有一种从一些网址获取数据的相当简单的方法?我试过最明显的版本,不起作用:

readcsv("https://dl.dropboxusercontent.com/u/.../testdata.csv")
Run Code Online (Sandbox Code Playgroud)

我没有找到任何可用的参考.有帮助吗?

julia

13
推荐指数
3
解决办法
4037
查看次数

确定特定包的版本

如何获取特定包的版本号?

显而易见的方法是获取所有已安装软件包的字典,然后筛选出感兴趣的软件包:

pkgs = Pkg.installed();
pkgs["Datetime"]
Run Code Online (Sandbox Code Playgroud)

获取所有已安装软件包的列表非常慢,特别是如果有很多软件包.

julia

13
推荐指数
3
解决办法
5248
查看次数

在Julia中被内存分配和垃圾收集困惑

我对Julia的内存分配感到有些困惑.我从FAQ中知道清除大变量使用的内存是通过将其设置为小(如0)然后运行来完成的gc().

但是,我对以下内容感到有些困惑.我创建一个随机Float32数组:

@time A = rand(Float32, 10000, 10000);
Run Code Online (Sandbox Code Playgroud)

time表示分配了大约400MB的RAM,而Julia的RAM使用量增加了400MB.这是有道理的.

然后我应用fft,但不要将结果绑定到任何变量:

@time fft(A);
Run Code Online (Sandbox Code Playgroud)

time 表示分配了~800MB的RAM,Julia的RAM使用量增加了800MB.

但是,RAM使用率仍然比开始时高1.2GB.这让我感到困惑,因为我没有将任何变量等同于fft(A),所以我希望分配的800MB会在fft执行后立即释放.

我试着跑gc,以为朱莉娅会意识到还有800MB的RAM被用于什么:

gc();
Run Code Online (Sandbox Code Playgroud)

这什么都不做.RAM使用率保持在~1.3GB.

但是,以下两行,

A = 0;
gc();
Run Code Online (Sandbox Code Playgroud)

释放所有正在使用的1.2GB,尽管事实上sizeof(A)只有400MB.所以我的问题是:

  • 为什么它看起来好像一个400MB大小的对象(根据sizeof)实际上分配了1.2GB?

garbage-collection memory-management julia

13
推荐指数
1
解决办法
2012
查看次数

Julia:连接字符串和整数

Julia连接字符串和整数值的最简单方法是什么?我想做的事情如下:

julia> foo = "test: "
"test: "

julia> bar = 3
3

julia> foobar = foo * bar
ERROR: `*` has no method matching *(::ASCIIString, ::Int64)
Run Code Online (Sandbox Code Playgroud)

julia

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

朱莉娅的符号数学?

我使用Mathematica进行符号数学计算.我打算换成另一种语言.Matlab(我用于标准计算的东西)包括这个功能,但我正在研究使用Julia的可能性,因为它似乎是未来.然而,似乎没有可用的象征工具(在官方文档中没有提到).显然,唯一可用的软件包(SymPy)在官方网站(http://pkg.julialang.org/)上说"测试失败" .

有谁能在朱莉娅这样做?

symbolic-math julia

13
推荐指数
2
解决办法
7229
查看次数

如何将Julia数组的数据类型从"Any"更改为"Float64"?

Julia中是否有一个函数返回所需类型的数组副本,即numpys astype函数的等价物?我有一个"任何"类型的数组,并希望将其转换为Float数组.我试过了:

new_array = Float64(array)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误

LoadError: MethodError: `convert` has no method matching 
convert(::Type{Float64}, ::Array{Any,2})
This may have arisen from a call to the constructor Float64(...),
since type constructors fall back to convert methods.
Closest candidates are:
  call{T}(::Type{T}, ::Any)
  convert(::Type{Float64}, !Matched::Int8)
  convert(::Type{Float64}, !Matched::Int16)
  ...
  while loading In[140], in expression starting on line 1

  in call at essentials.jl:56
Run Code Online (Sandbox Code Playgroud)

我可以编写一个遍历数组的函数并返回每个元素的浮点值,但是如果没有内置方法来执行此操作,我会发现它有点奇怪.

arrays julia

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

在Julia中理解没有基本情况的递归

这个片段来自Julia 中Rational Numbers的实现:

# Rational.jl
# ...
Rational{T<:Integer}(n::T, d::T) = Rational{T}(n,d)
Rational(n::Integer, d::Integer) = Rational(promote(n,d)...)
Rational(n::Integer) = Rational(n,one(n))

//(x::Rational, y::Integer) = x.num // (x.den*y) <--- HERE!

# ...
Run Code Online (Sandbox Code Playgroud)

查看//函数如何实现,然后与中缀表示法一起使用?这实际上如何返回一个值?

当我看到这段代码时,我解释如下:

  1. //使用Rational和Integer调用该函数.
  2. 但是它会在没有其他参数的情况下进行递归调用.

#2真的让我很困惑.数据结构中的递归在哪里结束?//如果不断评估任何值,如何返回值?

请帮我理解这个.

recursion recursive-datastructures julia

13
推荐指数
1
解决办法
227
查看次数

使用Julia在字符串中每10个字符插入一个换行符

我想在蛋白质序列中每10个字符插入一个换行符:

seq="MSKNKSPLLNESEKMMSEMLPMKVSQSKLNYEEKVYIPTTIRNRKQHCFRRFFPYIALFQ"
Run Code Online (Sandbox Code Playgroud)

在Perl中,它非常简单:

$seq=~s/(.{10})/$1\n/g ; # does the job!

perl -e '$seq="MSKNKSPLLNESEKMMSEMLPMKVSQSKLNYEEKVYIPTTIRNRKQHCFRRFFPYIALFQ"; $seq=~s/(.{10})/$1\n/g; print $seq'
MSKNKSPLLN
ESEKMMSEML
PMKVSQSKLN
YEEKVYIPTT
IRNRKQHCFR
RFFPYIALFQ
Run Code Online (Sandbox Code Playgroud)

在朱莉娅,

replace(seq, r"(.{10})" , "\n")
Run Code Online (Sandbox Code Playgroud)

不起作用,因为我不知道如何获取捕获组(.{10})并将其替换为自己+"\n"

julia> replace(seq, r"(.{10})" , "\n")
"\n\n\n\n\n\n"
Run Code Online (Sandbox Code Playgroud)

所以要做到这一点,我需要两个步骤:

    julia> a=matchall(r"(.{1,10})" ,seq)
    6-element Array{SubString{UTF8String},1}:
     "MSKNKSPLLN"
     "ESEKMMSEML"
     "PMKVSQSKLN"
     "YEEKVYIPTT"
     "IRNRKQHCFR"
     "RFFPYIALFQ"

    julia> b=join(a, "\n")
    "MSKNKSPLLN\nESEKMMSEML\nPMKVSQSKLN\nYEEKVYIPTT\nIRNRKQHCFR\nRFFPYIALFQ"

    julia> println(b)
    MSKNKSPLLN
    ESEKMMSEML
    PMKVSQSKLN
    YEEKVYIPTT
    IRNRKQHCFR
    RFFPYIALFQ

# Caution :    
a=matchall(r"(.{10})" ,seq) # wrong if seq is not exactly a multiple of 10 !

julia> seq
"MSKNKSPLLNESEKMMSEMLPMKVSQSKLNYEEKVYIPTTIRNRKQHCFRRFFPYIAL"

julia> matchall(r"(.{10})" ,seq) …
Run Code Online (Sandbox Code Playgroud)

regex replace julia

13
推荐指数
2
解决办法
1112
查看次数

macOS Python比训练神经网络中的Julia更快

我尝试将此处提供的NN代码移植到Julia,希望提高网络培训速度.在我的桌面上,事实证明是这样的.

然而,在我的MacBook上,Python + numpy击败了Julia.
使用相同参数进行训练时,Python的速度是Julia的两倍(4.4s vs 10.6s,一个纪元).考虑到Julia比我的桌面上的Python更快(大约2秒),似乎有一些资源,Python/numpy在mac上使用Julia不是.即使并行化代码,我也只能达到~6.6s(尽管这可能是因为我没有在编写并行代码方面经验丰富).我认为问题可能是Julia的BLAS比mac中原生使用的vecLib库慢,但是尝试不同的构建似乎并没有让我更接近.我尝试使用USE_SYSTEM_BLAS = 1和使用MKL构建两者,其中MKL给出了更快的结果(上面公布的时间).

我将发布笔记本电脑的版本信息以及我的Julia实现,以供参考.我目前无法访问桌面,但我在Windows上使用openBLAS运行相同版本的Julia,与使用openBLAS的干净安装Python 2.7相比.

这里有什么我想念的吗?

编辑:我知道我的Julia代码在优化方面有很多不足之处,我非常感谢任何提高速度的技巧.然而,这不是Julia在我的笔记本电脑上运行速度慢的情况,而是Python更快.在我的桌面上,Python在约13秒内运行一个纪元,在笔记本电脑上它只需要大约4.4秒.我最感兴趣的是这种差异来自哪里.我意识到这个问题可能有点糟糕.

笔记本电脑版本:

julia> versioninfo()
Julia Version 0.6.2
Commit d386e40c17 (2017-12-13 18:08 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin17.4.0)
  CPU: Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
  WORD_SIZE: 64
  BLAS: libmkl_rt
  LAPACK: libmkl_rt
  LIBM: libopenlibm
  LLVM: libLLVM-3.9.1 (ORCJIT, broadwell)
Run Code Online (Sandbox Code Playgroud)
Python 2.7.14 (default, Mar 22 2018, 14:43:05) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> …
Run Code Online (Sandbox Code Playgroud)

python optimization numpy julia

13
推荐指数
1
解决办法
1577
查看次数

在 Julia 中显示函数的所有方法

我如何可以显示所有函数方法在朱莉娅(多分派)?

例如,函数的命名空间中存在的所有方法abs

julia

13
推荐指数
1
解决办法
1453
查看次数