根据多个值过滤numpy结构化数组
Filter numpy structured array based on multiple values
我有一个 numpy 结构化数组。 :
myArray = np.array([(1, 1, 1, u'Zone3', 9.223),
(2, 1, 0, u'Zone2', 17.589),
(3, 1, 1, u'Zone2', 26.95),
(4, 0, 1, u'Zone1', 19.367),
(5, 1, 1, u'Zone1', 4.395)],
dtype=[('ID', '<i4'), ('Flag1', '<i4'), ('Flag2', '<i4'), ('ZoneName', '<U5'),
('Value', '<f8')])
我想在满足多个条件时对 "Value" 列中的值求和。如果我想要 Flag1 和 Flag2 ==1 我可以使用:
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1))]["Value"]))
但是,我还想包括第三个基于值是否在列表中的标准,相当于使用 x in list
:
criteriaList = ("Zone1", "Zone2")
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1) &
(myArray["ZoneName"] in criteriaList))]["Value"]))
应该等于 31.345。我是 numpy 的新手,探索过屏蔽数组,但不清楚这些数组是否可以或如何与结构化数组一起使用。谢谢
您需要使用 np.in1d
来测试您的 criteriaList
:
的成员资格
In [1]: myArray["ZoneName"] in criteriaList
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-ff2173ff4348> in <module>()
----> 1 myArray["ZoneName"] in criteriaList
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
In [2]: np.in1d(myArray["ZoneName"], criteriaList)
Out[2]: array([False, True, True, True, True], dtype=bool)
In [3]: myArray[(myArray["Flag1"] == 1) &
....: (myArray["Flag2"] == 1) &
....: np.in1d(myArray["ZoneName"], criteriaList)]["Value"].sum()
Out[3]: 31.344999999999999
我有一个 numpy 结构化数组。 :
myArray = np.array([(1, 1, 1, u'Zone3', 9.223),
(2, 1, 0, u'Zone2', 17.589),
(3, 1, 1, u'Zone2', 26.95),
(4, 0, 1, u'Zone1', 19.367),
(5, 1, 1, u'Zone1', 4.395)],
dtype=[('ID', '<i4'), ('Flag1', '<i4'), ('Flag2', '<i4'), ('ZoneName', '<U5'),
('Value', '<f8')])
我想在满足多个条件时对 "Value" 列中的值求和。如果我想要 Flag1 和 Flag2 ==1 我可以使用:
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1))]["Value"]))
但是,我还想包括第三个基于值是否在列表中的标准,相当于使用 x in list
:
criteriaList = ("Zone1", "Zone2")
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1) &
(myArray["ZoneName"] in criteriaList))]["Value"]))
应该等于 31.345。我是 numpy 的新手,探索过屏蔽数组,但不清楚这些数组是否可以或如何与结构化数组一起使用。谢谢
您需要使用 np.in1d
来测试您的 criteriaList
:
In [1]: myArray["ZoneName"] in criteriaList
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-ff2173ff4348> in <module>()
----> 1 myArray["ZoneName"] in criteriaList
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
In [2]: np.in1d(myArray["ZoneName"], criteriaList)
Out[2]: array([False, True, True, True, True], dtype=bool)
In [3]: myArray[(myArray["Flag1"] == 1) &
....: (myArray["Flag2"] == 1) &
....: np.in1d(myArray["ZoneName"], criteriaList)]["Value"].sum()
Out[3]: 31.344999999999999