SeS*_*esa 5 arrays sorting string julia
如标题所示,我需要按某个矩阵的列之一对其进行排序,如果可能的话,最好将其排在适当的位置。所述列包含String
s(数组的类型为Array{Union{Float64,String}}
),理想情况下,行应以字母顺序结束,由该列确定。线
sorted_rows = sort!(data, by = i -> data[i,2]),
Run Code Online (Sandbox Code Playgroud)
data
我的矩阵在哪里,产生错误ERROR: LoadError: UndefKeywordError: keyword argument dims not assigned
。指定我要排序的矩阵的哪一部分并添加参数dims=2
(我假设这是我要排序的维度),即
sorted_rows = sort!(data[2:end-1,:], by = i -> data[i,2],dims=2)
Run Code Online (Sandbox Code Playgroud)
只需将错误消息更改为ERROR: LoadError: ArgumentError: invalid index: 01 Suurin yhteinen tekijä ja pienin yhteinen jaettava of type String
。因此,编译器抱怨字符串是无效索引。
关于如何完成这种分类的任何想法?我应该说,在这种情况下,可以期望列中的字符串以数字开头,但是我不介意找到在一般情况下都可以使用的解决方案。
我正在使用Julia 1.1。
您sortslices
不需要sort
-后者只是对所有列进行独立排序,而前者则重新排列整个切片。其次,该by
函数不采用index,而是采用将要比较的值(并允许您以某种方式对其进行转换)。从而:
julia> using Random
data = Union{Float64, String}[randn(100) [randstring(10) for _ in 1:100]]
100×2 Array{Union{Float64, String},2}:
0.211015 "6VPQbWU5f9"
-0.292298 "HgvHLkufqI"
1.74231 "zTCu1U5Vdl"
0.195822 "O3j43sbhKV"
?
-0.369007 "VzFH2OpWfU"
-1.30459 "6C68G64AWg"
-1.02434 "rldaQ3e0GE"
1.61653 "vjvn1SX3FW"
julia> sortslices(data, by=x->x[2], dims=1)
100×2 Array{Union{Float64, String},2}:
0.229143 "0syMQ7AFgQ"
-0.642065 "0wUew61bI5"
1.16888 "12PUn4V4gL"
-0.266574 "1Z2ONSBP04"
?
1.85761 "y2DDANcFCe"
1.53337 "yZju1uQqMM"
1.74231 "zTCu1U5Vdl"
0.974607 "zdiU0sVOZt"
Run Code Online (Sandbox Code Playgroud)
不幸的是,我们还没有就地sortslices!
,但是您可以使用轻松构建一个排序视图sortperm
。这可能使用起来不那么快,但是如果出于语义原因需要就位,那么就可以解决问题。
julia> p = sortperm(data[:,2]);
julia> @view data[p, :]
100×2 view(::Array{Union{Float64, String},2}, [26, 45, 90, 87, 6, 96, 82, 75, 12, 27 … 53, 69, 100, 93, 36, 37, 39, 8, 3, 61], :) with eltype Union{Float64, String}:
0.229143 "0syMQ7AFgQ"
-0.642065 "0wUew61bI5"
1.16888 "12PUn4V4gL"
-0.266574 "1Z2ONSBP04"
?
1.85761 "y2DDANcFCe"
1.53337 "yZju1uQqMM"
1.74231 "zTCu1U5Vdl"
0.974607 "zdiU0sVOZt"
Run Code Online (Sandbox Code Playgroud)
(如果出于性能原因需要就地放置,我建议您使用DataFrame或类似的结构将其列作为独立的同质向量保存- Union{Float64, String}
比两个单独的类型良好的向量要慢,并且sort!
将DataFrame设为有效在您想要的整行上。)
归档时间: |
|
查看次数: |
169 次 |
最近记录: |