我想基于另一个数组从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的行的第一列
答案 0 :(得分:1)
您可以使用np.in1d
在n
和k
的第一列之间创建匹配掩码,然后使用反转掩码选择不匹配的行{{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