你好,我正在尝试过滤下面的numpy数组,但遇到了问题。我想过滤所有等于[('a','b ','c'),1]。问题是我不知道如何合并每个数组中的元素,所以不是[('a ','b','c '),1],我会有[('a','b ','c',1)],或者简单地过滤给定的原始结构。我尝试了np.concatenate()和np.ravel()的组合,但结果不是预期的。
a = np.array([[('a','b','c'), 1], [('b','c','a'), 1], [('a','b','c'), 2], [('a','b','c'), 1]])
Method:
Filter if 1st element = 'a', 2nd element = 'b', 3rd element ='c' and 4th element = 1
Desired Output:
output = np.array([[('a','b','c'), 1], [('a','b','c'), 1]])
编辑:我能够让这个与pandas解决方案一起工作,但只能通过将其转换为dataframe,这太昂贵了,因此我试图用numpy实现更优化的解决方案
2条答案
按热度按时间pgccezyw1#
您可以:
输出:
a == [('a', 'b', 'c'), 1]
的输出:不同元素对应不同比较器:
注意:你在评论中说了第四个元素,但它并不是真正的第四个元素,它是你构造numpy数组的第二个元素。
现在,如果你想为第二个元素(整数)设置一个〈=的条件,为元组元素(比如('a ',' b ',' c '))设置==的条件,简而言之,由于数组的构造方式,没有简单的方法。
但是一个解决方法是创建一个辅助数组,如:
然后用它来过滤不同的比较器为不同的列,如:
ybzsozfc2#
在您的情况下,更快的方法是显式比较第1项和第2项: