【发布时间】:2012-08-23 20:25:58
【问题描述】:
这个问题是关于根据某些列值过滤NumPyndarray。
我有一个相当大的 NumPy ndarray (300000, 50),我正在根据某些特定列中的值对其进行过滤。我有ndtypes,所以我可以按名称访问每一列。
第一列名为category_code,我需要过滤矩阵以仅返回category_code 位于("A", "B", "C") 中的行。
结果需要是另一个NumPy ndarray,其列仍可由dtype 名称访问。
这是我现在要做的:
index = numpy.asarray([row['category_code'] in ('A', 'B', 'C') for row in data])
filtered_data = data[index]
列表理解如下:
list = [row for row in data if row['category_code'] in ('A', 'B', 'C')]
filtered_data = numpy.asarray(list)
无法使用,因为我原来拥有的 dtypes 已无法访问。
有没有更好/更 Pythonic 的方式来实现相同的结果?
可能看起来像的东西:
filtered_data = data.where({'category_code': ('A', 'B','C'})
谢谢!
【问题讨论】:
-
大概你的意思是
row['category_code']而不是index =行中的data['category_code']? -
杜格尔,你是对的。我修好了它。谢谢!
-
我真的不认为您需要改进现有解决方案,您 (i) 构建满足您条件的行的 bool 数组和 (ii) 使用此数组来索引您的数据。它干净、可读、高效……你还想要什么?
-
Pierre GM- 这个例子是一个简化的例子。我实际上希望能够将其概括为多个列值(例如 category_code 是在这些值中,col_2 在该范围内,col_3 不大于 X,并且...)