Numpy屏蔽了来自另一个数组的数组初始化

Numpy屏蔽了来自另一个数组的数组初始化,numpy,Numpy,有没有比这更干净的方法从非ma初始化numpy屏蔽数组,所有屏蔽值False masked_array = np.ma.masked_array(array, mask=np.zeros_like(array, dtype='bool')) 对数组的重复引用似乎不必要且笨拙。如果不提供mask=参数,则掩码默认为标量布尔值,这将阻止对掩码的切片访问。您应该能够将掩码设置为False: >>> array = np.array([1,2,3]) >>> mas

有没有比这更干净的方法从非ma初始化numpy屏蔽数组,所有屏蔽值
False

masked_array = np.ma.masked_array(array, mask=np.zeros_like(array, dtype='bool'))

数组
的重复引用似乎不必要且笨拙。如果不提供
mask=
参数,则掩码默认为标量布尔值,这将阻止对掩码的切片访问。

您应该能够将掩码设置为False:

>>> array = np.array([1,2,3])
>>> masked_array = np.ma.masked_array(array, mask=False)
>>> masked_array
masked_array(data = [1 2 3],
             mask = [False False False],
       fill_value = 999999)
我看到了hpaulj的评论,并尝试了不同的方法来解决这个问题并比较性能。我无法解释两者的区别,但@hpaulj似乎对numpy的工作原理有了更深入的理解。任何关于为什么m3()执行速度如此之快的信息都将非常感谢

def origM():
    array = np.array([1,2,3])
    return np.ma.masked_array(array, mask=np.zeros_like(array, dtype='bool'))

def m():
    array = np.array([1,2,3])
    return np.ma.masked_array(array, mask=False)    

def m2():
    array = np.array([1,2,3])
    m = np.ma.masked_array(array)
    m.mask = False
    return m

def m3():
    array = np.array([1,2,3])
    m = array.view(np.ma.masked_array)
    m.mask = False
    return m

>>> origM()
masked_array(data = [1 2 3],
             mask = [False False False],
       fill_value = 999999)
所有四个返回相同的结果:

>>> m()
masked_array(data = [1 2 3],
             mask = [False False False],
       fill_value = 999999)

>>> m2()
masked_array(data = [1 2 3],
             mask = [False False False],
       fill_value = 999999)

>>> m3()
masked_array(data = [1 2 3],
             mask = [False False False],
       fill_value = 999999)
m3()执行速度最快:

>>> timeit.timeit(origM, number=1000)
0.024451958015561104
>>> timeit.timeit(m, number=1000)
0.0393978749634698
>>> timeit.timeit(m2, number=1000)
0.024049583997111768
>>> timeit.timeit(m3, number=1000)
0.018082750029861927

任何替代方案都会在封面下做同样的事情嘘,整洁-我不是从那里得到的,但是这个答案在那里被暗示了。