Python 如何使用Julia中PyCall导入的numpy.ma创建屏蔽数组
我想使用Julia中PyCall导入的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
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}