Julia似乎有很多类似Matlab的功能.我想使用谓词从数组中进行选择.在Matlab中,我可以这样做:
>> a = 2:7 ;
>> a > 4
ans =
0 0 0 1 1 1
>> a(a>4)
ans =
5 6 7
Run Code Online (Sandbox Code Playgroud)
在朱莉娅,我找到了一种笨重的表面方式来做部分工作:
julia> a = 2:7
2:7
julia> [int(x > 3) for x in a]
6-element Array{Any,1}:
0
0
1
1
1
1
Run Code Online (Sandbox Code Playgroud)
(使用维基百科称之为列表理解).我还没有弄清楚如何在Julia中应用这样的集合来选择,但可能会在错误的树上咆哮.如何从Julia中的数组中进行谓词选择?
DSM*_*DSM 29
如果使用点.进行元素比较,则可以使用类似Matlab的语法:
julia> a = 2:7
2:7
julia> a .> 4
6-element BitArray{1}:
false
false
false
true
true
true
julia> a[a .> 4]
3-element Array{Int32,1}:
5
6
7
Run Code Online (Sandbox Code Playgroud)
或者,filter如果您想要更具功能性的谓词方法,可以调用:
julia> filter(x -> x > 4, a)
3-element Array{Int32,1}:
5
6
7
Run Code Online (Sandbox Code Playgroud)
jch*_*jch 12
Julia中的数组理解比Haskell或Python中的列表理解更原始.有两种解决方案 - 您可以使用更高阶的过滤功能,也可以使用广播操作.
filter(x -> x > 4, a)
Run Code Online (Sandbox Code Playgroud)
这将filter使用谓词调用该函数x -> x > 4(请参阅Julia手册中的匿名函数).
a[Bool[a[i] > 4 for i = 1:length(a)]]
Run Code Online (Sandbox Code Playgroud)
这将执行a4和4 的元素之间的广播比较,然后使用得到的布尔数组进行索引a.它可以使用广播运营商更紧凑地编写:
a[a .> 4]
Run Code Online (Sandbox Code Playgroud)
小智 7
我目前使用的是 Julia 1.3.1,与之前的答案相比,某些语法发生了变化。要在多个条件下过滤数组,我必须执行以下操作:
x = range(0,1,length=100)
x[(x .> 0.4) .& (x .< 0.51)]
Run Code Online (Sandbox Code Playgroud)
请注意执行 AND 运算符所需的“.&”。