我试图在阅读发行说明的基础上理解Julia v0.6中的新类型系统.
任何人都可以告诉我什么
inv(M::Matrix{T}) where T <: AbstractFloat
Run Code Online (Sandbox Code Playgroud)
给了我与使用经典不同的东西
inv{T<:AbstractFloat}(M::Matrix{T})
Run Code Online (Sandbox Code Playgroud)
?
我有兴趣将Julia SharedArray用于科学计算项目.我目前的实现对BLAS的所有矩阵向量操作都很有吸引力,但我认为也许SharedArray可以在多核机器上提供一些加速.我的想法是简单地逐个索引更新输出向量,将索引更新耕种到工作进程.
前面的讨论在这里关于SharedArrayS和这里有关共享内存对象并没有对这个问题提供明确的指导.它看起来非常简单,但经过测试后,我有点困惑为什么这种方法效果很差(见下面的代码).对于初学者来说,似乎@parallel for分配了大量的内存.如果我在循环前加上@sync,如果以后需要整个输出向量,这似乎是一件很聪明的事情,那么并行循环要慢得多(尽管没有@sync,循环很快).
我是否错误地解释了SharedArray对象的正确使用?或者我可能无效地分配计算?
### test for speed gain w/ SharedArray vs. Array ###
# problem dimensions
n = 10000; p = 25000
# set BLAS threads; 64 seems reasonable in testing
blas_set_num_threads(64)
# make normal Arrays
x = randn(n,p)
y = ones(p)
z = zeros(n)
# make SharedArrays
X = convert(SharedArray{Float64,2}, x)
Y = convert(SharedArray{Float64,1}, y)
Z = convert(SharedArray{Float64,1}, z)
# …Run Code Online (Sandbox Code Playgroud) 当qsub一个工作我想要一个工作等待执行,直到第一个工作成功.我一直在看这些选项-hold_jid_ad并-hold_jid做到这一点,但看不出它们的区别.
我有一个test-bucket带有data文件夹的 AWS S3 存储桶。数据文件夹将有多个文件。
我能够删除 S3 存储桶中的文件。但我想要的是删除文件data夹中的文件而不删除文件夹。
我尝试了以下方法:
aws s3 rm s3://test-bucket/data/*
Run Code Online (Sandbox Code Playgroud)
还使用--recursive选项进行了检查,但这不起作用。
有没有办法使用 AWS CLI 删除文件夹中的文件?
我最近对我的代码进行了类型稳定性检查.当我打电话@code_warntype给它时,我得到以下输出:
Variables:
#unused#::IHT.#kw##L0_reg
#temp#@_2::Array{Any,1}
::IHT.#L0_reg
x::Array{Float64,2}
y::Array{Float64,1}
k::Int64
#temp#@_7::Bool
#temp#@_8::Bool
max_iter::Int64
max_step::Int64
quiet::Bool
v::IHT.IHTVariables{Float64,Array{Float64,1}}
tol::Float64
#temp#@_14::Int64
#temp#@_15::Int64
#temp#@_16::Int64
#temp#@_17::Any
###...###
#temp#@_17::Any = (Core.arrayref(#temp#@_2::Array{Any,1},#temp#@_16::Int64)::Any
###...###
v::IHT.IHTVariables{Float64,Array{Float64,1}} = (Core.typeassert)((Core.arrayref)(#temp#@_2::Array{Any,1},(Base.box)(Int64,(Base.add_int)(#temp#@_16::Int64,1)))::Any,IHT.IHTVariables{Float64,Array{Float64,1}})::IHT.IHTVariables{Float64,Array{Float64,1}}
Run Code Online (Sandbox Code Playgroud)
最小的工作示例,使用我的IHT.jl包:
Pkg.clone("https://github.com/klkeys/IHT.jl")
n = 100; p = 250; k = 2;
x = randn(n,p)
b = zeros(p); b[1:k] = randn(k); shuffle!(b)
y = x*b + randn(n)
@code_warntype L0_reg(x, y, k, quiet=true)
Run Code Online (Sandbox Code Playgroud)
看起来编译器正在使用它#temp#来读取函数的参数L0_reg.函数参数已完全指定.这个邪恶的小#temp#@_2变量从哪里出现?我能告诉编译器它的类型是什么吗?(希望不是Array{Any,1}......)
我在 Julia 包MultivariateStats.jl 中使用PCA。我正在尝试将旧的 Matlab 脚本转换为 Julia。但是,我不能再运行 Matlab 脚本了。我正在处理一系列图像。首先,我想确保输入矩阵正确。我将每个图像重新塑造为向量并将图像放入矩阵。我认为这些数据的格式是正确的,与 Matlab 相同。然后我生成了一个 PCA 模型。Matlab 会返回. 我如何在 Julia 中获得这些? nm x nM = fit(PCA, data)[coeff,score,latent]
您可以按如下方式重用阵列内存
> a=[1,2,3];b=a;a=[1,2,3];is(a,b)
false
> a=[1,2,3];b=a;a.=[1,2,3];is(a,b)
true
Run Code Online (Sandbox Code Playgroud)
在我分配整个阵列时,这是唯一必要的.分配子集时,无论是使用.=还是使用,都将始终使用现有数组=.
当使用具有多个输出的函数时,我遇到了这个问题.例:
> f = () -> ([1,2,3],[4,5,6]);
> a, = f()
([1,2,3],[4,5,6])
> a, .= f()
ERROR: syntax: invalid identifier name ".="
> (a,) .= f()
ERROR: MethodError: no method matching broadcast!(::Base.#identity,::Tuple{Array{Int64,1}}, ::Tuple{Array{Int64,1},Array{Int64,1}})
Closest candidates are:
broadcast!{nargs}(::Any, ::AbstractArray{T,N}, ::Any...) at broadcast.jl:169
broadcast!(::Base.#identity, ::AbstractArray{T,N}, ::Number) at broadcast.jl:19
broadcast!{T,S,N}(::Base.#identity, ::AbstractArray{T,N}, ::AbstractArray{S,N}) at broadcast.jl:23
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,而不必a在每次通话时扔掉?