我想在Julia中仅对数组的某些成员执行操作。语言新手,不知道该怎么做。这是我的小玩具测试:
myarray = ones(5)
mymask = [true; false; false; false; true;]
myarray = myarray[mymask] * 2
第三行不正确,输出为:
2-element Array{Float64,1}:
2.0
2.0
我想得到的是:
5-element Array{Float64,1}:
2.0
1.0
1.0
1.0
2.0
我对最有效的方法感兴趣,因为我正在使用的实际数组可能非常大。谢谢!
答案 0 :(得分:3)
您可以在左侧使用myarray[mask]
作为目标,然后在右侧进行分配或操作。例如:
julia> myarray[mymask] = 2;
julia> myarray[~mymask] *= 3;
julia> myarray
5-element Array{Float64,1}:
2.0
3.0
3.0
3.0
2.0
现在,使用myarray = myarray[mymask] * 2
,您可以将myarray
设置为生成的修改后的字词数组。
答案 1 :(得分:2)
补充DSM的答案,请注意BitArray
对于您的目的而言可能比Bool
组件的数组内存效率更高:
p = 2000
x = Array{Bool,1}(p) # e.g. [true; false; ...; true]
y = trues(p) # BitArray
比较尺寸:
julia> sizeof(x)
2000
julia> sizeof(y)
256
您可以根据需要使用y
填充false
,例如y[1] = false
,用于创建所需的位掩码。