【发布时间】:2017-11-29 17:08:17
【问题描述】:
我有一个唯一行列表和另一个更大的数据数组(在示例中称为 test_rows)。我想知道是否有更快的方法来获取数据中每个唯一行的位置。我能想到的最快方法是……
import numpy
uniq_rows = numpy.array([[0, 1, 0],
[1, 1, 0],
[1, 1, 1],
[0, 1, 1]])
test_rows = numpy.array([[0, 1, 1],
[0, 1, 0],
[0, 0, 0],
[1, 1, 0],
[0, 1, 0],
[0, 1, 1],
[0, 1, 1],
[1, 1, 1],
[1, 1, 0],
[1, 1, 1],
[0, 1, 0],
[0, 0, 0],
[1, 1, 0]])
# this gives me the indexes of each group of unique rows
for row in uniq_rows.tolist():
print row, numpy.where((test_rows == row).all(axis=1))[0]
这打印...
[0, 1, 0] [ 1 4 10]
[1, 1, 0] [ 3 8 12]
[1, 1, 1] [7 9]
[0, 1, 1] [0 5 6]
有没有更好或更 numpythonic(不确定该词是否存在)的方法来做到这一点?我正在寻找一个 numpy 组函数,但找不到它。基本上对于任何传入的数据集,我都需要最快的方法来获取该数据集中每个唯一行的位置。传入的数据集并不总是具有每个唯一的行或相同的数字。
编辑: 这只是一个简单的例子。在我的应用程序中,数字不仅仅是零和一,它们可以是 0 到 32000 之间的任何值。uniq 行的大小可以在 4 到 128 行之间,而 test_rows 的大小可以达到数十万。
【问题讨论】:
-
对“numpythonic”投了赞成票。
-
数据总是只有0和1吗?
-
uniq_rows和test_rows的典型大小(即行数和列数)是多少? -
如果您尝试过发布的方法,是否有任何更新?
-
@Divakar 我离开了几天,所以我现在正在讨论解决方案。