Convert float 2-D array to integer 2-dimensional array in Julia

I know that you can convert a Float64to Int64 using function convert. Unfortunately, this does not work when applied convertto a two-dimensional array.

julia> convert(Int64, 2.0)
2

julia> A = [1.0 2.0; 3.0 4.0]
2x2 Array{Float64,2}:
 1.0  2.0
 3.0  4.0

julia> convert(Int64, A)
ERROR: `convert` has no method matching convert(::Type{Int64}, ::Array{Float64,2
})
 in convert at base.jl:13

How to convert a 2-D array of floats to a 2-dimensional array of ints?

What i tried

I could do this using the following code, which is a bit detailed, but it works. I hope there is an easier way to do this though.

julia> A = [1.0 2.0; 3.0 4.0]
2x2 Array{Float64,2}:
 1.0  2.0
 3.0  4.0

julia> B = Array(Int64, 2, 2)
2x2 Array{Int64,2}:
 4596199964293150115  4592706631984861405
 4604419156384151675                    0

julia> for i = 1:2
           for j = 1:2
               B[i,j] = convert(Int64,A[i,j])
           end
       end

julia> B
2x2 Array{Int64,2}:
 1  2
 3  4

Answer that doesn't work for me

               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "help()" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.3.10 (2015-06-24 13:54 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org release
|__/                   |  x86_64-linux-gnu

julia> A = [1.2 3.4; 5.6 7.8]
2x2 Array{Float64,2}:
 1.2  3.4
 5.6  7.8

julia> round(Int64, A)
ERROR: `round` has no method matching round(::Type{Int64}, ::Array{Float64,2})
+4
source share
3 answers

This answer is for Julia v0.3. For newer versions see answer DSM

Use function int:

julia> a = rand(2,2)
2x2 Array{Float64,2}:
0.145651  0.362497
0.879268  0.753001

julia> int(a)
2x2 Array{Int64,2}:
0  0
1  1
-2
source

float 2x2 2x2 ints, , :

julia> A = [1.0 -0.3; 3.9 4.5]
2x2 Array{Float64,2}:
 1.0  -0.3
 3.9   4.5

julia> round.(Int, A)
2x2 Array{Int64,2}:
 1  0
 4  4

julia> floor.(Int, A)
2x2 Array{Int64,2}:
 1  -1
 3   4

julia> trunc.(Int, A)
2x2 Array{Int64,2}:
 1  0
 3  4

julia> ceil.(Int, A)
2x2 Array{Int64,2}:
 1  0
 4  5
+14

, :

julia> x = rand(2,2)
2x2 Array{Float64,2}:
 0.279777  0.610333
 0.277234  0.947914

julia> map(y->round(Int,y), x)
2x2 Array{Int64,2}:
 0  1
 0  1
+3

Source: https://habr.com/ru/post/1598970/


All Articles