Julia 在朱莉娅的字典里做一个矩阵,其中的键是我必须拆分的字符串
我有一本这种形式的词典Julia 在朱莉娅的字典里做一个矩阵,其中的键是我必须拆分的字符串,julia,Julia,我有一本这种形式的词典 "san-diego.new-york" => 0.225 "seattle.topeka" => 0.162 "san-diego.chicago" => 0.162 "seattle.new-york" => 0.225 "san-diego.topeka" => 0.126 "seattle.chicago" => 0.153 我想把它转换成一个2x3矩阵,其中I是西雅图圣地亚哥的集合,j是纽约托皮卡芝加
"san-diego.new-york" => 0.225
"seattle.topeka" => 0.162
"san-diego.chicago" => 0.162
"seattle.new-york" => 0.225
"san-diego.topeka" => 0.126
"seattle.chicago" => 0.153
我想把它转换成一个2x3
矩阵,其中I
是西雅图圣地亚哥的集合,j
是纽约托皮卡芝加哥的集合。我曾尝试使用split.(keys(dict),“)
拆分键,但没有成功
我想这样做是为了在之后进行形式M[I][j]=0.5的计算
编辑:我制作了一个新字典,其中键是元组。我不知道这是否有用
c = Dict("san-diego.new-york" => 0.225, "seattle.topeka" => 0.162, "san-diego.chicago" => 0.162
, "seattle.new-york" => 0.225, "san-diego.topeka" => 0.126, "seattle.chicago" => 0.153)
a = split.(keys(c),".")
b = collect(values(c))
new_c = Dict((a[i][1],a[i][2])=>b[i] for i in 1:length(b))
我最终编写了以下函数
function fillmatrix()
c = Dict("san-diego.new-york" => 0.225, "seattle.topeka" => 0.162, "san-diego.chicago" => 0.162
, "seattle.new-york" => 0.225, "san-diego.topeka" => 0.126, "seattle.chicago" => 0.153)
a = split.(keys(c),".")
b = collect(values(c))
new_c = Dict((a[i][1],a[i][2])=>b[i] for i=1:length(b))
list_i = []
list_j = []
for (u,v) in keys(new_c)
push!(list_i,u)
push!(list_j,v)
end
i = unique(list_i)
j = unique(list_j)
A = zeros((length(i),length(j)))
for ii in i
for jj in j
A[findfirst(x->x==ii,i),findfirst(x->x==jj,j)] = new_c[(ii,jj)]
end
end
return A
end
但这似乎是一个很长的解决方法,我想把它推广到更多的维度。有什么想法吗?
提前谢谢。我将从您的原始词典中给出解决方案(另一个可以相应调整)。您可以使用namedarray.jl包来解决您的问题。以下是完整的解决方案:
using NamedArrays
d = Dict("san-diego.new-york" => 0.225,
"seattle.topeka" => 0.162,
"san-diego.chicago" => 0.162,
"seattle.new-york" => 0.225,
"san-diego.topeka" => 0.126,
"seattle.chicago" => 0.153)
s = split.(keys(d), '.')
row = unique(string.(getindex.(s, 1)))
col = unique(string.(getindex.(s, 2)))
m = NamedArray([d[r*"."*c] for r in row, c in col],
(row, col), ("from", "to"))
(这假设所有行-列对都以其他方式存在,而不是d[r*”“*c]
writeget(d,r*”“*c,缺失)
,并且字典中不存在的条目中缺少值)
现在你可以写:
julia> m
2×3 Named Array{Float64,2}
from ╲ to │ new-york topeka chicago
──────────┼─────────────────────────────
san-diego │ 0.225 0.126 0.162
seattle │ 0.225 0.162 0.153
julia> m["san-diego", "new-york"]
0.225
julia> m[2,3]
0.153
(基本上,您可以使用名称或整数索引来引用列/行)
还请注意,我将行
和列
项转换为字符串
,但我们也可以将它们保留为子字符串
s(即在调用中省略字符串。
部分),但是字符串
作为行/列打印时看起来更好一些