Reputation: 47
I'm having some difficulty to convert a numpy matrix to Julia array with native types. So here is my problem: I have a code that returns a numpy matrix with the firsts 73 columns are bool that represents a feature array and the last column the probability associated with the vector of features.
B = np.ndarray((10,74),dtype = object)
B[:,0:73] = int(0)
B[:,-1] = float(0)
And I have a Julia code that call and receive this numpy matrix
using PyCall
push!(pyimport("sys")["path"], pwd());
a = pyimport("main")
t = a.analyze()
However my variable t is is an Array of PyObject and I would like to convert the entire Array to have native types (bool and flop). Because I'll use these variable in JuMP module.
10×74 Array{PyObject,2}:
PyObject True PyObject False PyObject True PyObject False PyObject False … PyObject False PyObject False PyObject 0.4842317916002127
PyObject True PyObject False PyObject True PyObject False PyObject False PyObject False PyObject False PyObject 0.4077830940988835
PyObject True PyObject False PyObject True PyObject False PyObject False PyObject False PyObject False PyObject 0.4134680134680136
PyObject True PyObject False PyObject True PyObject True PyObject False PyObject False PyObject False PyObject 0.8565891472868217
PyObject True PyObject False PyObject True PyObject True PyObject False PyObject False PyObject False PyObject 0.4753872053872055
PyObject True PyObject False PyObject True PyObject True PyObject False … PyObject False PyObject False PyObject 0.5216037930323644
PyObject True PyObject False PyObject True PyObject True PyObject False PyObject False PyObject False PyObject 0.5216037930323644
PyObject True PyObject False PyObject True PyObject True PyObject False PyObject False PyObject False PyObject 0.4775252525252527
PyObject True PyObject False PyObject True PyObject True PyObject False PyObject False PyObject False PyObject 0.47481481481481497
PyObject True PyObject False PyObject True PyObject True PyObject False PyObject False PyObject False PyObject 0.5277056277056278
Upvotes: 3
Views: 425
Reputation: 385
You cannot convert the entire matrix to have Union{Bool, Float64}
type because Bool
will be promoted to Float64
The best solution is to split up t
to BitArray{2}
and Vector{Float64}
like this
m = BitArray(t[:,1:end-1])
col = Vector{Float64}(t[:,end])
Note that BitArray{N}
type is used for arrays of boolean values instead of Array{Bool, N}
somewhere, and somewhere not, it depends on operations to be performed on this array. You can get more info in the question
Upvotes: 1