我一直在使用理解来组合字符串向量,但感觉有点笨拙。Julia:如何将一个矩阵的两个字符串列连接在一起
mymat = [collect('a':'z') collect('A':'Z')]
[join(mymat[i,:]) for i in 1:size(mymat)[1]]
我一直在使用理解来组合字符串向量,但感觉有点笨拙。Julia:如何将一个矩阵的两个字符串列连接在一起
mymat = [collect('a':'z') collect('A':'Z')]
[join(mymat[i,:]) for i in 1:size(mymat)[1]]
有许多方法来做到这一点。 意识到你加入两个字符,而不是两个字符串。 性能在宽的范围内(1至79)的不同之
意识到的结果不同的类型(矩阵(26x1)或载体(26))
制备(使用朱0.6.0.1)
mymat = [collect('a':'z') collect('A':'Z')]
using BenchmarkTools
@btime mapslices(join, mymat, 2)
79.372 μs (425 allocations: 15.63 KiB)
26×1 Array{String,2}
@btime mapslices(x->"$(x[1])$(x[2])", mymat, 2)
32.144 μs (297 allocations: 10.78 KiB)
26×1 Array{String,2}:
@btime [join(mymat[i,:]) for i in 1:size(mymat)[1]]
45.677 μs (212 allocations: 8.95 KiB)
26-element Array{String,1}
@btime [join(mymat[i,:]) for i in 1:size(mymat, 1)]
44.494 μs (211 allocations: 8.92 KiB)
26-element Array{String,1}
@btime [join(mymat[i,:]) for i in indices(mymat, 1)]
44.806 μs (211 allocations: 8.89 KiB)
26-element Array{String,1}
@btime [join($mymat[i,:]) for i in indices($mymat, 1)]
44.806 μs (211 allocations: 8.89 KiB)
26-element Array{String,1}
@btime [join($mymat[i,:]) for i in indices($mymat, 1)]
12.411 μs (211 allocations: 8.91 KiB)
26-element Array{String,1}
@btime ["$(mymat[i,1])$(mymat[i,2])" for i in 1:size(mymat)[1]]
4.255 μs (32 allocations: 1.30 KiB)
26-element Array{String,1}
@btime [string(mymat[i,1], mymat[i,2]) for i in 1:size(mymat)[1]]
4.157 μs (32 allocations: 1.30 KiB)
26-element Array{String,1}
@btime [string($mymat[i,1],$mymat[i,1]) for i in indices($mymat, 1)]
1.080 μs (29 allocations: 1.20 KiB)
26-element Array{String,1}
@btime string.(mymat[:,1], mymat[:,2])
15.775 μs (56 allocations: 2.64 KiB)
26-element Array{String,1}
@btime string.($mymat[:,1], $mymat[:,2])
1.133 μs (31 allocations: 1.55 KiB)
26-element Array{String,1}
提示:您可以(应该)使用'size(mymat,1)'而不是'size(mymat)[1]',实际上可能是'indices(mymat,1)'for概论。另外,插入'@ btime'宏的变量。 '@btime [string($ mymat [i,1],$ mymat [i,2])在索引($ mymat,1)中''的几乎是'$'的5倍。 – DNF
我打算推荐'mymat [:,1]。* mymat [:,2]'或@views mymat [:,1]。* mymat [:, 2]'但是意识到'*'不是为'Char'定义。奇怪的? – DNF
谢谢你的提示,我添加了这样的案例,并找出了比以前最快的案例快4倍的案例 –
您可以使用mapslices
这个:
julia> mapslices(join, mymat, 2)
26×1 Array{String,2}:
"aA"
"bB"
"cC"
"dD"
"eE"
哦,哎呀,我看到@Michael K. Borregaard和@凤阳王在评论中打败了我。发布这些答案! –
返回类型不同于原始方法 –
我会做一些事情,比如'mapslices(X - > “$(X [1])$(X [2])”,mymat,2)',但我不能说它不那么笨重。 –
我更喜欢它。少一个大小(mymat)[1]'! – fsmart
如果你不在乎'join'比'“$(x [1])$(x [2])”'稍微慢一些(因为它更普遍),'mapslices(join,mymat, 2)'更清洁。 –