string - Julia : How to convert vector of type string to type numeric (Float64)

标签 string vector type-conversion character julia

Julia 1.1我想将字符串类型的向量转换为数字类型(Float64)
这是向量:

string = ["2.2", "3,3", "4.4"];

我尝试了以下行但没有成功:
x = convert(Float64, string)
x = convert(DataVector{Float64}, string)
x = map(x->parse(Float64,x),string)
x = parse(Float64,string)
x = Float64(string)

最佳答案

最简单的是:

julia> s = ["2.2", "3.3", "4.4"];

julia> parse.(Float64, s)
3-element Array{Float64,1}:
 2.2
 3.3
 4.4

但是 map也将工作:
julia> map(x->parse(Float64,x), s)
3-element Array{Float64,1}:
 2.2
 3.3
 4.4

原始示例中的问题是双重的:
  • 第二个字符串 "3,3"是无效的 Floa64数字(它有一个错误的十进制分隔符);
  • 虽然有效,但我建议您不要使用 string作为变量的名称,因为它会掩盖 string Base 函数。

  • 此外,如果您的原始字符串以逗号作为十进制分隔符,那么您可以运行 replace首先在他们身上,例如在这里,我通过向量广播它:
    julia> s = ["2.2", "3,3", "4,4"];
    
    julia> replace.(s, [','=>'.'])
    3-element Array{String,1}:
     "2.2"
     "3.3"
     "4.4"
    

    编辑:如 DNF 所示写eiter实际上要快一点:
    replace.(s, (','=>'.',))
    

    或者
    replace.(s, Ref(','=>'.'))
    

    一般规则是你在做广播是因为你使用了 .所以你所有的论点都应该是可广播的。因为一个 Pair ,在我们的例子中,','=>'.' , 不被视为可广播的,我们必须将其包装在可广播的单元素容器中。

    第一种方法是使用 [ 将其包装在一个单元素数组中。和 ]这有点低效,因为它分配了一个新的临时数组。

    您可以使用单元素元组将其包装在 ( 中。和 ,) (注意 ) 之前的逗号,没有它,模式将无法正常工作)。这种方法不会分配内存。

    最后你可以使用内置的 Ref函数,它会创建一个 Base.RefValue{Pair{Char,Char}} 类型的对象在这种情况下,Julia 将其视为 0 维单元素容器(这是一个更高级的主题,您可以在 Julia 手册的 this section 中开始探索)。这种方法也不会分配内存。

    关于你可以广播的内容描述here在 Julia 手册中。

    附加案例:

    字符串和缺失数组

    为此,您需要最新的 Missings.jl(在包管理器中运行 up 命令):
    julia> s = ["2.2", "3.3", "4.4", missing]
    4-element Array{Union{Missing, String},1}:
     "2.2"
     "3.3"
     "4.4"
     missing
    
    julia> passmissing(parse).(Float64, s)
    4-element Array{Union{Missing, Float64},1}:
     2.2
     3.3
     4.4
      missing
    

    字符串数组和 NaN
    这在实践中不应该发生,因为您在一个向量中缺少字符串和浮点数,但是您可以这样做(我已将 5.5 添加到向量中,以向您表明该解决方案不是 NaN 特定的,但通常可以摄取任何字符串或任何 Float64 ):
    julia> s = ["2.2", "3.3", "4.4", NaN, 5.5]
    5-element Array{Any,1}:
        "2.2"
        "3.3"
        "4.4"
     NaN
       5.5
    
    julia> [v isa Float64 ? v : parse(Float64, v) for v in s]
    5-element Array{Float64,1}:
       2.2
       3.3
       4.4
     NaN
       5.5
    

    关于string - Julia : How to convert vector of type string to type numeric (Float64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54393762/

    相关文章:

    python - 如何使用正则表达式进行多次替换?

    c# - 如何用反斜杠替换正斜杠

    java - 将java对象转换为管道分隔字符串

    haskell - 可以用未装箱的向量进行递归定义吗?

    swift - 在 Swift 3.0 中循环遍历子字符串

    c++ - 带有计数器 C++ 的字符串 vector

    c++ - 将 double 转换为具有超过 5 个十进制数字精度的字符串

    sql-server - 将 TSQL 中的字符串处理为带时区的日期时间

    java - 为什么单字节有前导 ffffff

    c++ - 如何使用插入函数和迭代器更改 vector 中的元素?