Julia:如何将矩阵的两个字符串列连接在一起

时间:2017-09-15 19:57:00

标签: arrays string julia

我一直在使用理解来组合字符串向量,但这感觉有点笨拙。

mymat = [collect('a':'z')  collect('A':'Z')]
[join(mymat[i,:]) for i in 1:size(mymat)[1]]

2 个答案:

答案 0 :(得分:6)

您可以使用mapslices

julia> mapslices(join, mymat, 2)
26×1 Array{String,2}:
 "aA"
 "bB"
 "cC"
 "dD"
 "eE"

答案 1 :(得分:3)

有很多方法可以做到这一点。 意识到你要加入两个字符,而不是两个字符串。 性能差异很大(1到79)

意识到结果的类型不同(矩阵(26x1)或向量(26))

准备(使用Julia 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}