Python 如何使用Julia中PyCall导入的numpy.ma创建屏蔽数组

Python 如何使用Julia中PyCall导入的numpy.ma创建屏蔽数组,python,arrays,numpy,julia,Python,Arrays,Numpy,Julia,我想使用Julia中PyCall导入的numpy.ma创建一个屏蔽数组 在的帮助下,在numpy.ma模块中有一个Python示例是\u masked() >>> import numpy.ma as ma >>> x = ma.masked_equal([0, 1, 0, 2, 3], 0) >>> x masked_array(data = [-- 1 -- 2 3], mask = [ True False True Fa

我想使用Julia中PyCall导入的
numpy.ma
创建一个屏蔽数组

的帮助下,在
numpy.ma
模块中有一个Python示例是\u masked()

>>> import numpy.ma as ma
>>> x = ma.masked_equal([0, 1, 0, 2, 3], 0)
>>> x
masked_array(data = [-- 1 -- 2 3],
      mask = [ True False  True False False],
      fill_value=999999)
>>> ma.is_masked(x)
True
我试着用PyCall把它翻译成Julia

julia> using PyCall
julia> @pyimport numpy.ma as ma
julia> x = ma.masked_equal([0, 1, 0, 2, 3], 0);
julia> x
5-element Array{Int64,1}:
 0
 1
 0
 2
 3
julia> ma.is_masked(x)
false
上述代码不起作用。它无法创建Python对象。它只是创建了一个普通的Julia数组。我尝试了其他方法,如
ma.array([1,2,3],mask=[0,0,1])
,但仍然不起作用

但是从一个例子来看,

在这种情况下,可以直接创建python对象,而无需付出任何努力


问题:我的翻译有什么问题?如何在Julia中创建numpy掩码数组?

我认为您的翻译没有任何问题-这看起来像PyCall中的错误。PyCall尝试来回映射Julia和Python类型,以便可以无缝地使用Julia的数组,比如NumPy数组(例如)。在这种情况下,它看起来有点过于热心地进行转换

您可以直接使用
pycall
禁用转换。第二个参数是返回类型:

julia> x = pycall(ma.masked_equal, Any, [0,1,0,2,3], 0)
PyObject masked_array(data = [-- 1L -- 2L 3L],
             mask = [ True False  True False False],
       fill_value = 0)

julia> ma.is_masked(x)
true
这是python类型标识中的一个错误。PyCall认为
masked_array
对象类型应该映射到内置数组,因此它默认返回数组:

julia> pytype_query(x)
Array{Int64,N}

你能?这样你就可以自己跟踪进度了。非常感谢。我将在numpy.ma中打开一个关于蒙版数组的问题!
julia> pytype_query(x)
Array{Int64,N}