获取所有在python中具有相同值的行?

时间:2018-09-23 15:43:07

标签: python arrays numpy matrix

所以,假设我在python中有这个2D数组

a = [[1,2]
     [2,3]
     [3,2]
     [1,3]]

如何获取具有相同行值的所有数组条目并将其存储在新矩阵中。 例如,我将拥有

b = [1,2]
    [1,3]
查询后的

我的方法是b = [a[i] for i in a if a[i][0] == 1][0]] ,但似乎没有用?

我是Python的新手,整个索引切片的东西有点令人困惑。谢谢!

2 个答案:

答案 0 :(得分:1)

自从标记了以来,您可以使用NumPy数组执行此任务。首先定义您的数组:

a = np.array([[1, 2],
              [2, 3],
              [3, 2],
              [1, 3]])

对于第一列中的所有唯一值,您可以使用字典理解。这对于避免重复操作很有用。

d = {i: a[a[:, 0] == i] for i in np.unique(a[:, 0])}

{1: array([[1, 2],
           [1, 3]]),
 2: array([[2, 3]]),
 3: array([[3, 2]])}

然后通过d[1]访问第一列等于1的数组。

对于单个查询,您只需使用a[a[:, 0] == 1]

答案 1 :(得分:1)

for i in a语法为您提供列表中的实际项目。.so例如:

list_of_strs = ['first', 'second', 'third']
first_letters = [s[0] for s in list_of_strs]
# first_letters == ['f', 's', 't']

您实际上使用b = [a[i] for i in a if a[i][0]==1]所做的是尝试使用a的每个元素来索引a的元素。但是,由于a的每个元素本身都是一个列表,因此无法使用(您无法将列表与其他列表一起编制索引)

类似的事情应该起作用:

b = [row for row in a if row[0] == 1]

如果您将其编写为函数,则奖励积分,以便您可以选择要过滤的内容。

如果您经常使用数组,则还可以签出numpy library。使用numpy,您可以执行以下操作。

import numpy as np
a = np.array([[1,2], [2,3], [3,2], [1,3]])
b = a[a[:,0] == 1]

最后一行基本上是使用在第一组方括号内定义的布尔数组为原始数组a编制索引。它非常灵活,因此您也可以修改它以对第二个元素进行过滤,对其他条件(例如> some_number)进行过滤等等。