3

我在将 numpy 矩阵转换为具有本机类型的 Julia 数组时遇到了一些困难。所以这是我的问题:我有一个代码,它返回一个 numpy 矩阵,前 73 列是 bool,表示特征数组,最后一列是与特征向量相关的概率。

B = np.ndarray((10,74),dtype = object)
B[:,0:73] = int(0)
B[:,-1] = float(0)

我有一个 Julia 代码可以调用和接收这个 numpy 矩阵

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
4

1 回答 1

1

您不能将整个矩阵转换为具有Union{Bool, Float64}类型,因为Bool将被提升为Float64

最好的解决方案是拆分tBitArray{2}这样Vector{Float64}

m = BitArray(t[:,1:end-1])
col = Vector{Float64}(t[:,end])

请注意,BitArray{N}类型用于布尔值数组而不是Array{Bool, N}某处,而不是某处,它取决于要在此数组上执行的操作。您可以在问题中获得更多信息

于 2020-07-06T20:08:56.367 回答