在Julia中将float64 3-D数组转换为float32 3-D数组

时间:2018-10-04 19:25:23

标签: arrays julia

我尝试了以下方法,但没有一个起作用

A = zeros(2,2,2)
A[:,:,1] = [1 2; 3 4]
A[:,:,2] = [10 20; 30 40]

for i=1:size(A,1)
    convert(Array{Float32,2}, A[i,:,:])
end

print(typeof(A))

输出:Array{Float64,3}

convert(Array{Float32,3}, A)
print(typeof(A))

输出:Array{Float64,3}

map(y->(Float32,y), A)
print(typeof(A))

输出:Array{Float64,3}

我什至无法将Float64数组转换为Int的数组:

for i=1:size(A,1)
    round.(Int,  A[i,:,:])
end

print(typeof(A))

输出:Array{Float64,3}

还有什么我可以尝试将其从Array{Float64,3}转换为Array{Float32,3}吗?

4 个答案:

答案 0 :(得分:5)

A = zeros(2,2,2)
A[:,:,1] = [1 2; 3 4]
A[:,:,2] = [10 20; 30 40]

使用Float32.(A)

julia> A=Float32.(A)
2×2×2 Array{Float32,3}:
[:, :, 1] =
 1.0  2.0
 3.0  4.0

[:, :, 2] =
 10.0  20.0
 30.0  40.0

julia> print(typeof(A))
Array{Float32,3}

“。”运算符,用于按元素广播操作。

答案 1 :(得分:0)


    julia> x = zeros(3,3,3)
    3×3×3 Array{Float64,3}:
    [:, :, 1] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0

    [:, :, 2] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0

    [:, :, 3] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0

    julia> x .|> Float32
    3×3×3 Array{Float32,3}:
    [:, :, 1] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0

    [:, :, 2] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0

    [:, :, 3] =
     0.0  0.0  0.0
     0.0  0.0  0.0
     0.0  0.0  0.0

答案 2 :(得分:0)

您的convert语法已结束。您可以这样做:

B = convert(Array{Float32},A)

答案 3 :(得分:0)

您致电convert的方式没有任何问题。它完全可以正常工作。

但是convert就地下不起作用。相反,它创建一个 new 数组,您必须将其分配给输出变量(如果将新数组重新分配回A,它也将起作用):

julia> A = rand(2,2,2);

julia> B = convert(Array{Float32, 3}, A); # this does *not* change A

julia> typeof(A) # A is not changed
  Array{Float64,3}

julia> typeof(B) # this is the converted array
  Array{Float32,3}

julia> A = convert(Array{Float32, 3}, A);

julia> typeof(A)
  Array{Float32,3}

您还可以使用其他建议的解决方案,例如Float32.(A),但这不是您的问题。