如何将Julia数组的数据类型从“Any”更改为“Float64”?

时间:2016-02-18 13:15:56

标签: arrays julia

Julia中是否有一个函数返回所需类型的数组副本,即相当于numpys astype function?我有一个“任何”类型的数组,并希望将其转换为Float数组。我试过了:

new_array = Float64(array)

但是我收到以下错误

LoadError: MethodError: `convert` has no method matching 
convert(::Type{Float64}, ::Array{Any,2})
This may have arisen from a call to the constructor Float64(...),
since type constructors fall back to convert methods.
Closest candidates are:
  call{T}(::Type{T}, ::Any)
  convert(::Type{Float64}, !Matched::Int8)
  convert(::Type{Float64}, !Matched::Int16)
  ...
  while loading In[140], in expression starting on line 1

  in call at essentials.jl:56

我可以编写一个遍历数组的函数并返回每个元素的浮点值,但是如果没有内置方法可以做到这一点,我觉得有点奇怪。

4 个答案:

答案 0 :(得分:14)

使用convert。注意我用于第一个数组的语法;如果在创建数组之前知道了什么,可以在方括号前面声明类型。 Any Float64可以轻松地被convert取代,并且不再需要julia> a = Any[1.2, 3, 7] 3-element Array{Any,1}: 1.2 3 7 julia> convert(Array{Float64,1}, a) 3-element Array{Float64,1}: 1.2 3.0 7.0 功能。

Regex.Match(in.Substring(0, 4095), "\\[.*?\\]");

答案 1 :(得分:7)

您可以使用:

new_array = Array{Float64}(array)

答案 2 :(得分:2)

您还可以使用广播运营商.

a = Any[1.2, 3, 7]
Float64.(a)

答案 3 :(得分:1)

丹尼尔和兰迪的答案是可靠的,我只是在这里添加另一种方式,因为它可以使更复杂的迭代案例相对简洁。话虽如此,它并不像其他答案那样有效,后者更具体地与转换/类型声明相关。但由于语法可以很容易地扩展到其他用例,因此值得添加:

a = Array{Any,1}(rand(1000))
f = [float(a[i]) for i = 1:size(a,1)]