在python中获取具有相同值的所有行?
因此,假设我在python中有这个2D数组在python中获取具有相同值的所有行?,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,因此,假设我在python中有这个2D数组 a = [[1,2] [2,3] [3,2] [1,3]] 如何获取具有相同行值的所有数组项并将它们存储在新矩阵中。 例如,我将 b = [1,2] [1,3] 在查询之后 如果a[i][0]==1][0]] 但它似乎不起作用 我是Python新手,整个索引切片的事情有点让人困惑。谢谢 由于已标记,因此可以使用NumPy数组执行此任务。首先定义数组: a = np.array([[1, 2],
a = [[1,2]
[2,3]
[3,2]
[1,3]]
如何获取具有相同行值的所有数组项并将它们存储在新矩阵中。
例如,我将
b = [1,2]
[1,3]
在查询之后
如果a[i][0]==1][0]]
但它似乎不起作用
我是Python新手,整个索引切片的事情有点让人困惑。谢谢 由于已标记,因此可以使用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]
a语法中的For i为您提供列表中的实际项目。例如:
list_of_strs = ['first', 'second', 'third']
first_letters = [s[0] for s in list_of_strs]
# first_letters == ['f', 's', 't']
如果a[i][0]==1]
试图用a的每个元素为a的一个元素建立索引,那么实际使用a中i的b=[a[i]所做的是什么。但是,由于的每个元素本身就是一个列表,这将不起作用(不能将列表与其他列表一起索引)
像这样的方法应该会奏效:
b = [row for row in a if row[0] == 1]
如果你把它写成一个函数,这样你就可以选择你想要过滤的东西了
如果您经常使用阵列,还可以查看。有了numpy,你可以做这样的事情
import numpy as np
a = np.array([[1,2], [2,3], [3,2], [1,3]])
b = a[a[:,0] == 1]
最后一行基本上是索引原始数组a
,在第一组方括号内定义一个布尔数组。它非常灵活,所以你也可以修改它,在第二个元素上进行过滤,在其他条件下进行过滤(如>some_number
),等等。b=[x为x,如果x[0]==1]
谢谢,它对我有用!但是我想知道是否有更简单的方法来访问元素?@JimmyW,你真的需要定义simpler
。据我所知,没有比a[a[:,0]==1]
更简单的方法了。