查找非零元素的索引并按值分组

独自的

我用python编写了一个代码,该代码以numpy矩阵作为输入并返回按相应值分组的索引列表(即output [3]返回值为3的所有索引)。但是,我缺乏编写矢量化代码的知识,因此不得不使用ndenumerate来完成。此操作仅花费了大约9秒钟,这太慢了。

我的第二个想法是使用numpy.nonzero,如下所示:

for i in range(1, max_value):
   current_array = np.nonzero(input == i)
   # save in an array

这花费了5.5秒,因此这是一个不错的改进,但仍然很慢。有没有循环的优化方法或获取每个值的索引对的优化方法?

海梅

这是针对您的问题的O(n log n)算法。显而易见的循环解决方案是O(n),因此对于足够大的数据集,这会更慢:

>>> a = np.random.randint(3, size=10)
>>> a
array([1, 2, 2, 0, 1, 0, 2, 2, 1, 1])

>>> index = np.arange(len(a))
>>> sort_idx = np.argsort(a)
>>> cnt = np.bincount(a)
>>> np.split(index[sort_idx], np.cumsum(cnt[:-1]))
[array([3, 5]), array([0, 4, 8, 9]), array([1, 2, 6, 7])]

这将取决于您的数据大小,但是对于大型数据集来说,这是相当快的:

In [1]: a = np.random.randint(1000, size=1e6)

In [2]: %%timeit
   ...: indices = np.arange(len(a))
   ...: sort_idx = np.argsort(a)
   ...: cnt = np.bincount(a)
   ...: np.split(indices[sort_idx], np.cumsum(cnt[:-1]))
   ...: 
10 loops, best of 3: 140 ms per loop

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在每个轴上查找非零元素的最大索引

来自分类Dev

在Matlab矩阵中查找非零元素的索引

来自分类Dev

如何查找数组中最后一个非零元素的索引

来自分类Dev

在Matlab矩阵中查找非零元素的索引

来自分类Dev

查找数组中的非零元素

来自分类Dev

在Python中使用非零元素保存索引值

来自分类Dev

Matlab-为每个零矩阵元素查找最接近的非零元素的索引

来自分类Dev

位图索引搜索结果数组:在恒定时间内查找非零元素的索引?

来自分类Dev

R-在data.table中查找第一个非零元素的索引

来自分类Dev

在Simulink中查找二维数组中第一个非零元素的索引

来自分类Dev

R-在data.table中查找第一个非零元素的索引

来自分类Dev

查找二维数组中具有一些非零元素的列的索引

来自分类Dev

在(非)对角矩阵中查找非零元素的速度

来自分类Dev

如何获取numpy中每一列的非零元素索引?

来自分类Dev

返回r中的最后一个非零元素索引

来自分类Dev

返回矩阵每一行的最后K个非零元素的索引

来自分类Dev

如何在Julia中跨行找到最小非零元素的列的索引?

来自分类Dev

使用findIndex()从非零元素开始

来自分类Dev

对行的非零元素执行numpy乘积

来自分类Dev

在numpy 2D数组中查找与零相邻的非零元素的数量

来自分类Dev

在python中找到给定元素右边的第一个非零元素的索引

来自分类Dev

一种返回Perl中最后一个非零元素的索引的优雅方法?

来自分类Dev

一种返回Perl中最后一个非零元素的索引的优雅方法?

来自分类Dev

python解包零元素

来自分类Dev

Python NumPy-给具有非零元素的身份矩阵非零

来自分类Dev

更改列中第一个非零元素上方的数组值

来自分类Dev

如何用零随机替换非零元素?

来自分类Dev

向量访问非零元素但输出为零

来自分类Dev

获取数组中非零元素的左上和右下索引的函数

Related 相关文章

  1. 1

    在每个轴上查找非零元素的最大索引

  2. 2

    在Matlab矩阵中查找非零元素的索引

  3. 3

    如何查找数组中最后一个非零元素的索引

  4. 4

    在Matlab矩阵中查找非零元素的索引

  5. 5

    查找数组中的非零元素

  6. 6

    在Python中使用非零元素保存索引值

  7. 7

    Matlab-为每个零矩阵元素查找最接近的非零元素的索引

  8. 8

    位图索引搜索结果数组:在恒定时间内查找非零元素的索引?

  9. 9

    R-在data.table中查找第一个非零元素的索引

  10. 10

    在Simulink中查找二维数组中第一个非零元素的索引

  11. 11

    R-在data.table中查找第一个非零元素的索引

  12. 12

    查找二维数组中具有一些非零元素的列的索引

  13. 13

    在(非)对角矩阵中查找非零元素的速度

  14. 14

    如何获取numpy中每一列的非零元素索引?

  15. 15

    返回r中的最后一个非零元素索引

  16. 16

    返回矩阵每一行的最后K个非零元素的索引

  17. 17

    如何在Julia中跨行找到最小非零元素的列的索引?

  18. 18

    使用findIndex()从非零元素开始

  19. 19

    对行的非零元素执行numpy乘积

  20. 20

    在numpy 2D数组中查找与零相邻的非零元素的数量

  21. 21

    在python中找到给定元素右边的第一个非零元素的索引

  22. 22

    一种返回Perl中最后一个非零元素的索引的优雅方法?

  23. 23

    一种返回Perl中最后一个非零元素的索引的优雅方法?

  24. 24

    python解包零元素

  25. 25

    Python NumPy-给具有非零元素的身份矩阵非零

  26. 26

    更改列中第一个非零元素上方的数组值

  27. 27

    如何用零随机替换非零元素?

  28. 28

    向量访问非零元素但输出为零

  29. 29

    获取数组中非零元素的左上和右下索引的函数

热门标签

归档