小编day*_*ter的帖子

一次访问一些数组并循环到开头

我有一个简单的问题应该有一个简单的答案,但我还没想到它.我想一次处理一个数组,一定数量的元素,然后回绕到开头.

这是一个图表,显示n每次需要10和3个元素时:

迭代3一次

到目前为止,我尝试编写一个简单的迭代失败了:使用% n给我零,这不适用于Julia的一个索引...... :)

arrays iteration julia

7
推荐指数
1
解决办法
102
查看次数

重复应用功能特定次数

如果您具有某个功能,是否可以通过简单或内置的方式来应用该功能n,或者直到结果特定为止。因此,例如,如果您要应用该sqrt功能4次,效果如下:

julia> sqrt(sqrt(sqrt(sqrt(11231))))
1.791229164345863
Run Code Online (Sandbox Code Playgroud)

您可以输入以下内容:

repeatf(sqrt, 11231, 4)
Run Code Online (Sandbox Code Playgroud)

function julia

6
推荐指数
3
解决办法
704
查看次数

在for循环中,何时评估循环参数?

这是一个真正的初学者问题......

for循环中,何时评估循环参数?

在这里,循环永远运行,因此c每次循环开始时显然都会被"检查":

c= [1]
for i in c
   push!(c, i)
   @show c
end
c = [1,1]
c = [1,1,1]
c = [1,1,1,1]
...
Run Code Online (Sandbox Code Playgroud)

但是这个循环只评估一次:

c= [1]
for i in 1:length(c)
   push!(c, i)
   @show c
end
c = [1,1]
Run Code Online (Sandbox Code Playgroud)

这看起来像是评估enumerate(c)每个循环:

c= [1]
for (i, _) in enumerate(c)
    push!(c, i)
    @show c
end
c = [1,1]
c = [1,1,1]
c = [1,1,1,1]
...
Run Code Online (Sandbox Code Playgroud)

但这个循环显然不会:

c= [1]
for i in eachindex(c)
    push!(c, i)
    @show c
end …
Run Code Online (Sandbox Code Playgroud)

loops for-loop julia

5
推荐指数
1
解决办法
140
查看次数

使用字符串和子字符串

鉴于:

julia> SubString <: String
false
Run Code Online (Sandbox Code Playgroud)

你将如何编写一个接受子字符串和字符串的函数?

julia> function myfunction(ss::String)
           @show ss, typeof(ss)
       end
myfunction (generic function with 1 method)

julia> myfunction("Hello World")
(ss, typeof(ss)) = ("Hello World", String)
("Hello World", String)

julia> s = split("Hello World")
2-element Array{SubString{String},1}:
 "Hello"
 "World"

julia> foreach(x -> myfunction(x), s)
ERROR: MethodError: no method matching myfunction(::SubString{String})
Closest candidates are:
  myfunction(::String) at REPL[11]:2
Run Code Online (Sandbox Code Playgroud)

julia

5
推荐指数
1
解决办法
722
查看次数

测试一个字符是否为有效的 Julia 单字符变量名?

如何测试单个 Unicode 字符是否是有效的变量名。手册上说:

变量名必须以字母(AZ 或 az)、下划线或大于 00A0 的 Unicode 代码点子集开头;特别是,Unicode 字符类别 Lu/Ll/Lt/Lm/Lo/Nl(字母)、Sc/So(货币和其他符号)和一些其他类似字母的字符(例如 Sm 数学符号的子集)是允许。

是否有测试字符以查看它是否为有效变量名的函数?isvalid()看起来它会检查一个字符是否是有效字符,这可能不一样?

julia

5
推荐指数
1
解决办法
69
查看次数

将字符串内插值传递给宏

我对这段代码的问题是当传递内插字符串时宏失败:

macro t(a, b, c)
    quote
        println(:c, " = " , $c)
        ($a, $b, $c)
    end
end

function test()
    # works:
    @t 1 2 3

    # doesn't work:
    x = ?
    @t 1 2 "x is $x"
end

test()
Run Code Online (Sandbox Code Playgroud)
test()
c = 3   # works
ERROR: UndefVarError: x not defined
Run Code Online (Sandbox Code Playgroud)

所以内t插值x是不可用的。有没有解决方案,或者在这里使用宏只是一个坏主意?

macros julia

4
推荐指数
1
解决办法
124
查看次数

Pkg颜色和符号的说明

我已经浏览了Julia Pkg经理的文档,但是在浏览任何有关符号和颜色的示例或说明时看不到。

包装经理

今天早上我可能比平时更愚蠢,但是...

黄色的向上箭头是否表示有可用的升级,或者已经升级,或者可以升级,或者应该升级?up不会更改任何内容,并且st每次运行时都会提供相同的信息。

绿色+号表示已经添加了包装,但是为什么绿色不是白色?还是说可以添加软件包?还是应该添加包装?add不会改变,也不会改变st

红色减号告诉我“您应该删除此程序包”。还是说“它已被删除”或“它不起作用”?

我真正理解的输出的唯一部分是BenchmarkTools软件包已安装,并且版本为v0.4.2(其他外观普通的条目也是如此)。

那里有解释吗?

julia

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

模拟一个弹跳球?

是否有可能使用朱莉娅的方程求解器创建一个弹跳球的简单模型?

我从这开始:

using ODE

function bb(t, f)
    (y, v) = f
    dy_dt = v
    dv_dt = -9.81
    [dy_dt, dv_dt]
end

const y0 =  50.0             # height
const v0 =   0.0             # velocity
const startpos = [y0; v0]

ts = 0.0:0.25:10             # time span

t, res = ode45(bb, startpos, ts)
Run Code Online (Sandbox Code Playgroud)

它产生有用的数字:

julia> t
44-element Array{Float64,1}:
  0.0
  0.0551392
  0.25
  0.5
  0.75
  1.0
  ?
  8.75
  9.0
  9.25
  9.5
  9.75
 10.0

julia> res
44-element Array{Array{Float64,1},1}:
 [50.0,0.0]
 [49.9851,-0.540915]
 [49.6934,-2.4525]
 [48.7738,-4.905]
 [47.2409,-7.3575]
 ?
 [-392.676,-93.195]
 [-416.282,-95.6475]
 [-440.5,-98.1] …
Run Code Online (Sandbox Code Playgroud)

physics differential-equations julia differentialequations.jl

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

如何在数据类型的字段中存储变量之间的链接?

假设我有一种用于存储信息的类型,包括指向其他​​变量的链接:

type MyList
    a::Int64
    b::Int64
    connections::Array
    MyList(a, b) = new(a, b, [])
end
Run Code Online (Sandbox Code Playgroud)

这个link函数会把第二个变量的名字放在第一个变量的connections列表中(如果我知道怎么做的话):

function link(x_1::MyList, x_2::MyList)
    push!(x_1.connections, #= name of =# x_2)     # <------------- ?
end
Run Code Online (Sandbox Code Playgroud)

然后我就能做到这一点:

a1 = MyList(11, 22)
a2 = MyList(33, 44)
a3 = MyList(55, 66)
a4 = MyList(77, 88)    
link(a1, a2)
link(a1, a3)
link(a1, a4)
Run Code Online (Sandbox Code Playgroud)

然后我可以检查连接:

a1.connections

-> [a2, a3, a4]
Run Code Online (Sandbox Code Playgroud)

并做这样的事情:

for conn in a1.connections
    println(conn.a)
end

-> 
33
55
77
Run Code Online (Sandbox Code Playgroud)

也就是说,如果我可以解决如何在connections数组中首先存储变量名称的问题.

或许我正在以错误的方式接近这个?

julia

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

有多个关键字参数的替代方案?

我正在编写一个目前已经有31个关键字参数的函数.例:

function myfunc(a::Int, b::Real, c::String;
     msize=12,
     mcolor="black",
     mtext="text",
     mwidth="regular",
     ... and many more
)
Run Code Online (Sandbox Code Playgroud)

关于这一点的一个好处是你可以使用你想要调整的几个值来调用函数,而不必事先定义和/或维护像字典这样的东西.它们可以按任何顺序提供.用户体验很好.但...

这是处理许多默认参数的最佳方法吗?如果我走得更高,我会遇到问题吗?

julia

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

关键字参数别名

什么是允许别名用于关键字参数的好方法.说我想要这样的界面:

function f(a, b; k1=1, k2=2)
    println(a, b)
    println(k1, k2)
end

function f(a, b; key1=1, key2=2)
    println(a, b)
    println(key1, key2)
end

function f(a, b; kw1=1, kw2=2)
    println(a, b)
    println(kw1, kw2)
end

function f(a, b; keyword1=1, keyword2=2)
    println(a, b)
    println(keyword1, keyword2)
end
Run Code Online (Sandbox Code Playgroud)

所以你可以调用f(1, 2, kw1=3, kw2=4)f(1, 2, keyword1=3, keyword2=4)运行相同的功能.

julia

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