gpt4 book ai didi

arrays - 按包含字符串的列之一对 Julia 1.1 矩阵进行排序

转载 作者:行者123 更新时间:2023-12-02 04:35:18 24 4
gpt4 key购买 nike

正如标题所示,我需要按某个矩阵的列之一对它的行进行排序,如果可能的话最好就地排序。所述列包含 String(数组的类型为 Array{Union{Float64,String}}),理想情况下,行应按字母顺序结束,由下式确定本专栏。线路

sorted_rows = sort!(data, by = i -> data[i,2]),

其中data是我的矩阵,产生错误ERROR:LoadError:UndefKeywordError:关键字参数dims未分配。指定我想要对矩阵的哪一部分进行排序并添加参数 dims=2 (我假设这是我想要排序的维度),即

sorted_rows = sort!(data[2:end-1,:], by = i -> data[i,2],dims=2)

只需将错误消息更改为ERROR: LoadError: ArgumentError: invalid index: 01 Suurin yhteinen tekijä ja pienin yhteinen jaettava of type String。因此编译器提示字符串是无效索引。

关于如何完成这种类型的排序有什么想法吗?我应该说,在这种情况下,列中的字符串预计以数字开头,但我不介意找到一个适用于一般情况的解决方案。

我正在使用 Julia 1.1。

最佳答案

您想要sortslices ,不是sort — 后者只是对所有列进行独立排序,而前者则重新排列整个切片。其次,by函数不采用索引,它采用即将比较的(并允许您以某种方式对其进行转换)。因此:

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"

不幸的是,我们没有就地 sortslices!但是,您可以使用 sortperm 轻松构建排序 View 。这可能不会那么快使用,但如果您出于语义原因需要就地性,它就可以解决问题。

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"

(如果您出于性能原因想要就地性,我建议使用 DataFrame 或类似的结构,将其列保存为独立的同质向量 - Union{Float64, String} 将比两个单独的良好类型向量慢和 sort! ing DataFrame 可以像您想要的那样在整行上工作。)

关于arrays - 按包含字符串的列之一对 Julia 1.1 矩阵进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55363518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com