Julia 中的字典元素操作

标签 dictionary julia elementwise-operations

我想对字典的所有值广播一个操作。对于一个数组,我知道我可以使用以下方法广播一个元素操作:

julia> b1 = [1, 2, 3]
julia> b1./2
3-element Array{Float64,1}:
 0.5
 1.0
 1.5

向字典的所有值广播相同操作的有效方法是什么?说,为了字典

a1 = Dict("A"=>1, "B"=>2)

最佳答案

为字典的键和值定义了一个迭代协议(protocol),所以你可以这样做,例如:

julia> d = Dict("a"=>1, "b"=>2)
Dict{String,Int64} with 2 entries:
  "b" => 2
  "a" => 1

julia> values(d).^2
2-element Array{Int64,1}:
 4
 1

如果您想就地更改字典,请使用 map!,例如:

julia> map!(x->x^2, values(d))
Base.ValueIterator for a Dict{String,Int64} with 2 entries. Values:
  4
  1

julia> d
Dict{String,Int64} with 2 entries:
  "b" => 4
  "a" => 1

但是,您的函数必须输出可以转换回字典值类型的类型。在我的示例中,我对 Int 进行平方,从而产生 Int。但是,在你除以 2 的问题中,这显然会产生 Float64。如果 float 无法转换回整数,则会出现错误。

注意,您也可以通过键进行广播,例如:

julia> f(x) = "hello mr $(x)"
f (generic function with 1 method)

julia> f.(keys(d))
2-element Array{String,1}:
 "hello mr b"
 "hello mr a"

但这不能在原地完成,即您不能在键上使用 map!

重要的是,请注意您不应该实例化集合。事实上,这将是低效。所以避免这样的结构: collect(values(d)) ./2.

关于Julia 中的字典元素操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61926519/

相关文章:

arrays - 在 julia 中合并两个排序数组

performance - Julia 中短向量的快速随机选择

arrays - 将 Julia 函数应用于数组的嵌套数组

c++ - 比较 OpenCV Mat 与标量元素

c# - 将两个列表映射到 C# 中的字典中

python 列表字典追加到新键

python - python中的矩阵文件到字典

.net - Dictionary<TKey, TValue> 是否在后备存储中添加空元素?

python - Numpy 按元素进行运算

c - 使用 GNU Blas 子程序在 vector 和矩阵之间进行元素乘积