如何使用另一个NumPy数组的值过滤NumPy数组

时间:2018-03-07 07:17:42

标签: python arrays numpy

我有一个像这样的NumPy数组:

type = array(["A", "B", "A", "B", "B", "A", "A"])

我想使用这个数组来过滤另一个数组:

data = array([5,4,5],
             [0,4,3],
             [2,1,6],
             [6,7,9],
             [0,1,4],
             [7,9,8],
             [1,4,9])

我希望能够按类型过滤数据,例如:

typeA = array([5,4,5],[2,1,6],[7,9,8],[1,4,9])
typeB = array([0,4,3],[6,7,9],[0,1,4])

知道我应该如何实现它?由于第一个数组不是布尔值,因此找出解决方案时遇到了很多麻烦

2 个答案:

答案 0 :(得分:6)

让我们定义你的数组:

>>> from numpy import array
>>> data = array(([5,4,5], [0,4,3], [2,1,6], [6,7,9], [0,1,4], [7,9,8], [1,4,9]))
>>> type_ = array(["A", "B", "A", "B", "B", "A", "A"])

现在,让我们找到你的typeA:

>>> A = data[type_=="A"]
>>> A
array([[5, 4, 5],
       [2, 1, 6],
       [7, 9, 8],
       [1, 4, 9]])

你的typeB:

>>> B = data[type_=="B"]
>>> B
array([[0, 4, 3],
       [6, 7, 9],
       [0, 1, 4]])

此处,type_=="A"type_=="A"是布尔数组。我们使用它们来选择我们想要的data元素。

有关使用布尔或“掩码”数组进行索引的更多信息,请参阅NumPy docs

最后,type是内置的python,最好不要覆盖它。所以,我们在这里使用了type_

答案 1 :(得分:0)

import numpy as np

type_ = np.array(['A','B','A','B','B','A','A'])
data = np.array([[5,4,5],
                 [0,4,3],
                 [2,1,6],
                 [6,7,9],
                 [0,1,4],
                 [7,9,8],
                 [1,4,9]])

from collections import defaultdict
type_splitted = defaultdict(list)
for type_i, data_i in zip(type_, data):
    type_splitted[type_i].append(data_i)
typeA = np.asarray(type_splitted['A'])
typeB = np.asarray(type_splitted['B'])