我尝试了以下方法,但没有一个起作用
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}
吗?
答案 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)
,但这不是您的问题。