Arrays 在Julia中使用掩码更改数组的某些元素
我只想对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
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
示例的原因。