Numpy屏蔽了来自另一个数组的数组初始化
有没有比这更干净的方法从非ma初始化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
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
任何替代方案都会在封面下做同样的事情嘘,整洁-我不是从那里得到的,但是这个答案在那里被暗示了。