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

Arrays 在Julia中使用掩码更改数组的某些元素,arrays,julia,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

我只想对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

我特别感兴趣的是最有效的方法,因为我使用的实际阵列可能相当大。谢谢

您可以在左侧使用
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
设置为结果修改项的数组。

您可以在左侧使用
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
设置为结果修改项的数组。

补充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

您可以根据需要使用
false
填充
y
,例如
y[1]=false
,以创建所需的位掩码。

作为DSM答案的补充,请注意
位数组
可能比
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

您可以根据需要使用
false
s填充
y
,例如
y[1]=false
,以创建所需的位掩码。

Oh OK。因此,在这个示例中,我想做的是
myarray[mymask]=myarray[mymask]*2
。谢谢@本:您不需要重复
myarray[mymask]
,这就是我给出
*=3
示例的原因。哦,好的。因此,在这个示例中,我想做的是
myarray[mymask]=myarray[mymask]*2
。谢谢@本:您不需要重复
myarray[mymask]
,这就是我给出
*=3
示例的原因。