我有一个像这样的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])
知道我应该如何实现它?由于第一个数组不是布尔值,因此找出解决方案时遇到了很多麻烦
答案 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'])