我是一个新的python用户,对深入了解NumPy模块的工作原理非常感兴趣。我正在编写一个函数,它可以同时使用蒙面数组和未屏蔽数组作为数据输入。我注意到有几个矮胖蒙面作业看起来很相似(甚至可以工作?)与正常的(未蒙面的)对应物。其中一个函数是numpy.zeros和numpy.ma.zeros。其他人能告诉我,比如说,使用numpy.ma.zeros和numpy.zeros创建数组的优势吗?当您使用蒙面数组时,它会产生实际的不同吗?我已经注意到,当我使用numpy.zeros_like时,它可以很好地创建一个蒙面数组或非蒙面数组。
发布于 2015-11-07 06:16:36
np.ma.zeros创建一个蒙面数组,而不是一个普通数组,如果以后对该数组的某些操作创建无效值,则该数组可能很有用。手册中的一个例子:
数组有时包含无效或丢失的数据。在对这些数组执行操作时,我们希望抑制无效的值,这就是满足的目的(下面给出了一个典型的使用示例)。 例如,检查以下数组:X= np.array(2,1,3,np.nan,5,2,3,np.nan) 当我们试图计算数据的平均值时,结果是无法确定的: np.mean(x) nan 平均值是使用粗略的
np.sum(x)/len(x)计算的,但是由于添加到NaN中的任何数字都会生成NaN,所以这是行不通的。输入蒙面数组: M= np.ma.masked_array(x,np.isnan(x)) >>> m masked_array(data = 2.0 1.0 3.0 -- 5.0 2.0 3.0 -,掩码=假真假真,fill_value=1e+20) 在这里,我们构造了一个隐藏数组来抑制所有的NaN值。我们现在可以开始计算其他值的平均值: np.mean(m) 2.6666666666666665
发布于 2015-11-07 06:54:38
作为初学者,不要太沉迷于蒙面数组。它是np.ndarray的一个子类,它在处理数据时很有用,这些数据有一些坏值,在计算平均值时您希望忽略这些值。但是,否则,您应该关注使用numpy类创建和索引(和计算)。
ma数组不仅是一个子类,它还包含两个常规数组。一个有数据,包括任何“坏”的值。这是一个常规的numpy数组。另一个是布尔数组,掩码。蒙面类的开发人员试图让它以与常规数组相同的方式运行,但是增加了掩蔽。大多数(如果不是全部)蒙面数组的新增特性都是用Python代码实现的。
很难理解numpy的底层C代码,但是看看用Python实现的函数和方法是有指导意义的。我经常在ipython会话中查看这些内容,但它们也可以在numpy github存储库上进行研究。
https://stackoverflow.com/questions/33579522
复制相似问题