PyCall 接收 Numpy 并转换为原生类型元素
PyCall receving Numpy and convert to native types element
我在将 numpy 矩阵转换为具有本机类型的 Julia 数组时遇到了一些困难。
所以这是我的问题:我有一个代码 returns 一个 numpy 矩阵,前 73 列是布尔值,表示特征数组,最后一列是与特征向量相关的概率。
B = np.ndarray((10,74),dtype = object)
B[:,0:73] = int(0)
B[:,-1] = float(0)
我有一个调用和接收这个 numpy 矩阵的 Julia 代码
using PyCall
push!(pyimport("sys")["path"], pwd());
a = pyimport("main")
t = a.analyze()
但是我的变量 t 是一个 PyObject 数组,我想将整个数组转换为具有本机类型(bool 和 flop)。因为我将在 JuMP 模块中使用这些变量。
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
您不能将整个矩阵转换为 Union{Bool, Float64}
类型,因为 Bool
将提升为 Float64
最好的解决方案是像这样将 t
拆分为 BitArray{2}
和 Vector{Float64}
m = BitArray(t[:,1:end-1])
col = Vector{Float64}(t[:,end])
请注意,BitArray{N}
类型用于布尔值数组而不是 Array{Bool, N}
某处,而某处则不是,它取决于要对该数组执行的操作。您可以在
中获取更多信息
我在将 numpy 矩阵转换为具有本机类型的 Julia 数组时遇到了一些困难。 所以这是我的问题:我有一个代码 returns 一个 numpy 矩阵,前 73 列是布尔值,表示特征数组,最后一列是与特征向量相关的概率。
B = np.ndarray((10,74),dtype = object)
B[:,0:73] = int(0)
B[:,-1] = float(0)
我有一个调用和接收这个 numpy 矩阵的 Julia 代码
using PyCall
push!(pyimport("sys")["path"], pwd());
a = pyimport("main")
t = a.analyze()
但是我的变量 t 是一个 PyObject 数组,我想将整个数组转换为具有本机类型(bool 和 flop)。因为我将在 JuMP 模块中使用这些变量。
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
您不能将整个矩阵转换为 Union{Bool, Float64}
类型,因为 Bool
将提升为 Float64
最好的解决方案是像这样将 t
拆分为 BitArray{2}
和 Vector{Float64}
m = BitArray(t[:,1:end-1])
col = Vector{Float64}(t[:,end])
请注意,BitArray{N}
类型用于布尔值数组而不是 Array{Bool, N}
某处,而某处则不是,它取决于要对该数组执行的操作。您可以在