numpy - ndarray - 如何根据另一个数组删除行

时间:2017-04-27 08:42:05

标签: python numpy

我想基于另一个数组从ndarray中删除行。 例如:

k = [1,3,99]

n = [
  [1,'a']
  [2,'b']
  [3,'c']
  [4,'c']
  [.....]
  [99, 'a']
  [100,'e']
]

期待结果:

out = [
  [2,'b']
  [4,'c']
  [.....]
  [100,'e']
]

将删除值为k的行的第一列

2 个答案:

答案 0 :(得分:1)

您可以使用np.in1dnk的第一列之间创建匹配掩码,然后使用反转掩码选择不匹配的行{{1像这样 -

n

如果第一列已经是n[~np.in1d(n[:,0].astype(int), k)] dtype,请跳过int转化步骤。

示例运行 -

.astype(int)

对于性能,如果第一列已排序,我们可以使用np.searchsorted -

In [41]: n
Out[41]: 
array([['1', 'a'],
       ['2', 'b'],
       ['3', 'c'],
       ['4', 'c'],
       ['99', 'a'],
       ['100', 'e']], 
      dtype='|S21')

In [42]: k
Out[42]: [1, 3, 99]

In [43]: n[~np.in1d(n[:,0].astype(int), k)]
Out[43]: 
array([['2', 'b'],
       ['4', 'c'],
       ['100', 'e']], 
      dtype='|S21')

答案 1 :(得分:0)

如果您的数据结构是列表,请找到如下的简单解决方案,但您可以通过list()方法转换为列表。

def check(list):
 k=[1,3,99]
 if(list[0] not in k): 
  return list

final_list = map(check,n)
final_list = final_list.remove(None)
print final_list