numpy蒙面数组的奇怪行为

时间:2013-10-30 15:05:40

标签: python arrays numpy masking

我很难理解numpy蒙面数组的行为。

以下是让我感到困惑的片段:

arr = numpy.ma.array([(1,2),(3,4)],dtype=[("toto","int"),("titi","int")])
arr[0][0] = numpy.ma.masked
  1. 执行此操作时没有任何操作,元素[0][0]
  2. 上未应用蒙版
  3. 将数据更改为[[1,2],[3,4]](而不是[(1,2),(3,4)]),我收到以下错误: TypeError: expected a readable buffer object
  4. 似乎我完全误解了如何设置(和使用)蒙面数组。

    你能告诉我这段代码有什么问题吗?

    感谢

    编辑:没有指定dtypes,它就像预期的那样工作

1 个答案:

答案 0 :(得分:1)

屏蔽数组的目的是告诉任何操作,即数组的某些元素无效,即被屏蔽。

例如,你有一个数组:

a = np.array([[2, 1000], [3, 1000]])

并且您希望忽略元素>100的所有操作。您创建一个蒙版数组,如:

b = np.ma.array(a, mask=(a>100))

您可以在两个阵列中执行某些操作以查看差异:

a.sum()
# 2005
b.sum()
# 5

a.prod()
# 6000000
b.prod()
# 6

如您所见,蒙面项目会被忽略......