ecj*_*cjb 2 string vector character type-conversion julia
在Julia 1.1我想将字符串类型的向量转换为数字类型(Float64)时,这里是向量:
string = ["2.2", "3,3", "4.4"];
Run Code Online (Sandbox Code Playgroud)
我尝试了以下行但没有成功:
x = convert(Float64, string)
x = convert(DataVector{Float64}, string)
x = map(x->parse(Float64,x),string)
x = parse(Float64,string)
x = Float64(string)
Run Code Online (Sandbox Code Playgroud)
最简单的是:
julia> s = ["2.2", "3.3", "4.4"];
julia> parse.(Float64, s)
3-element Array{Float64,1}:
2.2
3.3
4.4
Run Code Online (Sandbox Code Playgroud)
但map也可以工作:
julia> map(x->parse(Float64,x), s)
3-element Array{Float64,1}:
2.2
3.3
4.4
Run Code Online (Sandbox Code Playgroud)
原始示例中的问题是双重的:
"3,3"无效Floa64数字(它有一个错误的十进制分隔符);string用作变量的名称,因为它会掩盖stringBase 中的函数。此外,如果您的原始字符串有逗号作为十进制分隔符,那么您可以先运行replace它们,例如,我在这里通过向量广播它:
julia> s = ["2.2", "3,3", "4,4"];
julia> replace.(s, [','=>'.'])
3-element Array{String,1}:
"2.2"
"3.3"
"4.4"
Run Code Online (Sandbox Code Playgroud)
编辑:如DNF所示,编写eiter实际上要快一点:
replace.(s, (','=>'.',))
Run Code Online (Sandbox Code Playgroud)
或者
replace.(s, Ref(','=>'.'))
Run Code Online (Sandbox Code Playgroud)
一般规则是您正在进行广播,因为您使用了 a,.因此您的所有参数都应该是可广播的。因为Pair在我们的例子中,a','=>'.'不被视为可广播的,所以我们必须将它包装在一个可广播的单元素容器中。
第一种方法是使用[和将其包装在一个元素数组中]这有点低效,因为它分配了一个新的临时数组。
您可以使用单元素元组将其包裹在(and ,)(注意前面的逗号),没有它,模式将无法正常工作)。这种方法不会分配内存。
最后,你可以使用一个内置的Ref功能,这将创建类型的对象Base.RefValue{Pair{Char,Char}}在这种情况下,由朱莉娅看作是一个0维的元件容器(这是更高级的话题一点,你就可以开始探索这一部分的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
Run Code Online (Sandbox Code Playgroud)
字符串数组和 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |