使用Julia中的掩码更改数组的某些元素

时间:2017-01-16 18:50:29

标签: arrays julia

我想在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

我对最有效的方法感兴趣,因为我正在使用的实际数组可能非常大。谢谢!

2 个答案:

答案 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,用于创建所需的位掩码。