该代码实现了一个Pollard rho()函数的示例,用于查找正整数n的因子.我已经检查了Julia"Primes"包中的一些代码,这些代码快速运行以试图加速pollard_rho()函数,但都无济于事.代码应该在大约100毫秒到30秒(Erlang,Haskell,Mercury,SWI Prolog)中执行n = 1524157897241274137,但在JuliaBox,IJulia和Julia REPL上需要大约3到4分钟.我怎样才能让它变得快速?
pollard_rho(1524157897241274137)= 1234567891
__precompile__()
module Pollard
export pollard_rho
function pollard_rho{T<:Integer}(n::T)
f(x::T, r::T, n) = rem(((x ^ T(2)) + r), n)
r::T = 7; x::T = 2; y::T = 11; y1::T = 11; z::T = 1
while z == 1
x = f(x, r, n)
y1 = f(y, r, n)
y = f(y1, r, n)
z = gcd(n, abs(x - y))
end
z >= n ? "error" : z
end
end # module
Run Code Online (Sandbox Code Playgroud) 我需要编写一个作为输入的函数
a = [12,39,48,36]
Run Code Online (Sandbox Code Playgroud)
并产生作为输出
b=[4,4,4,13,13,13,16,16,16,12,12,12]
Run Code Online (Sandbox Code Playgroud)
其中的想法是将一个元素重复三到两次(这应该是可变的)并除以 2 或 3。
我尝试这样做:
c=[12,39,48,36]
a=size(c)
for i in a
repeat(c[i]/3,3)
end
Run Code Online (Sandbox Code Playgroud) http://julia.readthedocs.org/en/latest/manual/metaprogramming/讨论朱莉娅宏,通常开始@,但也列出了两个特殊的宏text_str和cmd,其处理text"string"和`shell command`分别.是否有Julia支持的这些特殊宏的完整列表?是否可以定义自己的?
在朱莉娅,我有这样的功能:
function f(x::Float64, c::Float64)
if x <= 0
return(0.0)
elseif x <= c
return(x / c)
else
return(1.0)
end
end
Run Code Online (Sandbox Code Playgroud)
该函数是类型稳定的,因此可以快速运行.但是,我希望将该函数包含在一个包中以进行常规分发,包括32位计算机.这里的最佳做法是什么?我应该为其编写另一个版本的函数Float32(如果我有很多这样的函数,这可能会很烦人)?我可以使用FloatingPoint输入类型吗?如果我这样做,我怎么保证功能型保持稳定,因为0.0和1.0有Float64,而x / c可能是Float32或Float16?也许我可以使用类型参数,例如T<:FloatingPoint然后让x::T和c::T,然后在函数体中使用0.0::T和1.0::T确保它是类型稳定的?
这里的任何指导将不胜感激.
如何在数据类型中声明具有固定大小的数组字段?我正在创建一个名为CPU的复合数据类型.我知道您可以将字段的类型设置为数组类型,但是您是否可以实例化大小或者是否需要创建显式构造函数?
type CPU
//how do I declare memory as an Int8 array of size 64K
//memory::Array{Int8,1}
//memory = Array{Int8,64000}?
OpCode::Int8
Operand::Int8
Condition::Int8
PC::Int64
end
Run Code Online (Sandbox Code Playgroud) 我最近对我的代码进行了类型稳定性检查.当我打电话@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}......)
我有不同的数学表达式集,必须在运行时进行评估.目前,通过用等效值和eval结果替换符号来完成任务.(可以通过任何现有的符号包完成)
现在,请参阅Julia-lang中模块的定义:
Julia中的模块是单独的变量工作空间,即它们引入了一个新的全局范围....模块允许您创建顶级定义(也称为全局变量),而不必担心当您的代码与其他人一起使用时的名称冲突.
由于Julia的功能可以做元数据,
我想知道是否可以在运行时创建匿名模块m=Module(),并将它们用作评估表达式的范围eval(m, :(a+b)).
但我根本找不到将变量加载到运行时模块的方法.虽然我可以得到结果:
julia> ex=:(module mo; a=1; b=4; end)
julia> eval(ex)
julia> eval(mo,:(a+b))
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用匿名模块的更多功能方式.
任何帮助.
我正在尝试使用内部数组制作一个类型,但却无法做到.
这是我的代码:
type Gradient
color::GrandientPoint
Gradient(color=[]) = new(color)
function Gradient(rgb::RGB)
push!(color,GrandientPoint(rgb,0))
end
end
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
错误:UndefVarError:颜色未定义
我究竟做错了什么?
我正在努力将我为 Python 找到的指令“翻译”为在 Julia 中使用 Pyplot。这一定是一个简单的问题,但是您知道如何使用 Pyplot 在 Julia 中的绘图中设置刻度数吗?
考虑以下代码:
vector<string> parse(char* _config) {
ifstream my_file(_config);
vector<string> my_lines;
string nextLine;
while (std::getline(my_file, nextLine)) {
if (nextLine[0] == '#' || nextLine.empty() || nextLine == "") continue;
my_lines.push_back(nextLine);
}
return my_lines;
}
Run Code Online (Sandbox Code Playgroud)
和这个配置文件:
#Verbal OFF
0
#Highest numeric value
100
#Deck
67D 44D 54D 63D AS 69H 100D 41H 100C 39H 10H 85H 7D 42S 6C 67H 61D 33D 28H 93S QH 5D 91C 40S 50C 74S 8C 98C 96C 71D 82S 75S 23D 40C 29S QC 84C 16C 80D 13H …Run Code Online (Sandbox Code Playgroud)