python - PyCall 接收 Numpy 并转换为原生类型元素

标签 python numpy julia pycall

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

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 数组,我想将整个数组转换为具有 native 类型(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} 类型用于 bool 值数组而不是 Array{Bool, N} 某处和某处不,它取决于操作在这个数组上执行。您可以在 question 中获取更多信息

关于python - PyCall 接收 Numpy 并转换为原生类型元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62701472/

相关文章:

image - 翻转 Matplotlib imshow() 的 x 和 y 轴

Julia:如何有效计算 `Vector{Union{T, Missing}}` 中缺失的数量

python - 在 python pandas 中查找分类变量的比率

Python Mechanize 等待和点击

python - 为 3D 形状着色

arrays - Julia 的负/补索引,如 R

foreach - 在 Julia 中循环遍历屏蔽列表的干净方法

python - 使用python从大型二进制文件中删除一系列字符

python - 条形图与散点图的颜色相同

python - 计算所有子矩阵有多少矩阵具有满秩