python - NumPy 数组中相同行的索引

标签 python arrays pandas numpy

我已经问过这个问题的一个变体,但我仍然对代码的运行时有疑问。

给定一个由 15000 行和 44 列组成的 numpy 数组。我的目标是找出哪些行相等并将它们添加到列表中,如下所示:

1 0 0 0 0
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
1 0 0 0 0
1 2 3 4 5

结果:

equal_rows1 = [1,2,3]
equal_rows2 = [0,4]

到目前为止我所做的是使用以下代码:

import numpy as np


input_data = np.load('IN.npy')

equal_inputs1 = []
equal_inputs2 = []

for i in range(len(input_data)):
  for j in range(i+1,len(input_data)):
     if np.array_equal(input_data[i],input_data[j]):
        equal_inputs1.append(i)
        equal_inputs2.append(j)

问题在于,返回所需的数组需要花费大量时间,并且这仅允许 2 个不同的“相似行列表”,尽管可以有更多。有没有更好的解决方案,特别是在运行时方面?

最佳答案

这对于 pandas groupby 来说非常简单:

df
   A  B  C  D  E
0  1  0  0  0  0
1  0  0  0  0  0
2  0  0  0  0  0
3  0  0  0  0  0
4  1  0  0  0  0
5  1  2  3  4  5

[g.index.tolist() for _, g in df.groupby(df.columns.tolist()) if len(g.index) > 1]
# [[1, 2, 3], [0, 4]]

如果您正在处理许多行和许多独特的组,这可能会有点慢。性能取决于您的数据。也许有更快的 NumPy 替代方案,但这肯定是最容易理解的。

关于python - NumPy 数组中相同行的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54132351/

相关文章:

python - 在 PyQt5 中,如何在 QTreeWidget 单元格内添加 QSpinBox?

c# - 当它减少和增加时分隔列表中的值

python - 在 Pandas 数据框中将 float 转换为字符串

python - Pandas read_csv() 损失数字精度

python - 如何在 Pandas 中对数据框进行分组并保留列

python - Tensorflow 无法通过变量获取梯度,但可以通过张量获取梯度

python - 通过序列输出进行解析 - Python

python - 放大 python shell wing_ide

c - 指向固定大小数组的指针数组

javascript - for 循环以相反顺序迭代最后 5 个对象时出现问题