Numpy进行循环矢量化:使用np.all广播和测试唯一元素

韦斯

工作循环,预期结果

我正在尝试使用非常大的数据集对代码中的慢速for循环进行矢量化处理,以根据测试删除重复项。结果应仅保留前三个元素唯一的元素,而第四个元素是所有重复项中最大的元素。例如

in = np.array(((0, 12, 13, 1), (0, 12, 13, 10), (1, 12, 13, 2)))

应该成为

out = np.array(((0, 12, 13, 10), (1, 12, 13, 2)))

这对于使用for循环来说是微不足道的,但是正如我提到的那样,它非常慢。

unique = np.unique(in[:, :3], axis=0)
out = np.empty((0, 4))
for i in unique:
    out = np.vstack((out, np.hstack((i[:], np.max(in[np.all(in[:, :3] == i[:], axis=1)][:, 3])))))

我尝试过的(1)

当我尝试通过将每个索引替换为来删除带索引的for循环i[:]unique[np.arange(unique.shape[0])]

out = np.vstack((out, np.hstack((unique[np.arange(unique.shape[0])], np.max(in[np.all(in[:, :3].astype(int) == unique[np.arange(unique.shape[0])], axis=1)][:, 3])))))

Numpy抱怨输入形状与所有内容一起:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<__array_function__ internals>", line 6, in all
  File "/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py", line 2351, in all
    return _wrapreduction(a, np.logical_and, 'all', axis, None, out, keepdims=keepdims)
  File "/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py", line 90, in _wrapreduction
    return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
numpy.AxisError: axis 1 is out of bounds for array of dimension 0

我尝试过的(2)

基于StackOverflow在输入此问题时的建议(python / NumPy中的Broadcast / Vectorizing内部和外部for循环):

newout = np.vstack((newout, np.hstack((tempunique[:, None], np.max(inout[np.all(inout[:, :3].astype(int) == tempunique[:, None], axis=1)][:, 3])))))

我在抱怨输入和输出之间的大小不匹配时出错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: boolean index did not match indexed array along dimension 0; dimension is 3 but corresponding boolean dimension is 2

重提问题

有没有正确的方法来广播我的索引以消除for循环?

xcmkz

我对您的用例了解不足,无法确定是否值得介绍Pandas,但是在Pandas中有效地做到这一点只需要几行代码:

import numpy as np
import pandas as pd

in_array = np.array(((0, 12, 13, 1), (0, 12, 13, 10), (1, 12, 13, 2)))
in_df = pd.DataFrame(in_array)


# group by unique combinations of the 0th, 1st, and 2nd columns, then take the
# max of the 3rd column in each group. `reset_index` change cols 0-2 from index
# back to normal columns
out_df = in_df.groupby([0, 1, 2])[3].max().reset_index()
out_array = out_df.values

print(out_array)
# Output:
# [[ 0 12 13 10]
#  [ 1 12 13  2]]

一个简单的时序测试表明,使用Pandas处理100000行随机生成的输入数组需要0.0117秒,而使用for循环实现则需要2.6103秒。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

numpy:一次对几列进行矢量化访问?

来自分类Dev

通过唯一元素对值进行分组

来自分类Dev

对向量的每个唯一元素使用roxofun

来自分类Dev

无法在使用 selenium 和 python 的网页抓取期间识别唯一元素

来自分类Dev

Numpy中的矢量化-广播

来自分类Dev

使用numpy vectorize在2D数组中仅在一个轴上进行矢量化

来自分类Dev

在计算距离和 np.sum 上优化 numpy 矢量化

来自分类Dev

循环变量感知numpy的切片和矢量化计算

来自分类Dev

numpy中Kronecker产品的双循环矢量化和整形

来自分类Dev

如何使用scala根据某些元素从元组列表中查找唯一元素?

来自分类Dev

基于一维唯一元素过滤numpy结构化数组

来自分类Dev

具有唯一元素的np数组行

来自分类Dev

循环遍历R中列表中的唯一元素对

来自分类Dev

在Numpy数组中查找非唯一元素的索引

来自分类Dev

在Excel 2010中的时间间隔内对唯一元素进行分组

来自分类Dev

如何按日期时间对具有唯一元素的数组进行排序(Python)

来自分类Dev

如何在python中的列表中找到唯一元素?(不使用设置)

来自分类Dev

如何使用R查找data.frame中唯一元素的坐标?

来自分类Dev

如何使用Go的text / template包返回数组中的唯一元素?

来自分类Dev

使用唯一元素创建所有可能的子序列

来自分类Dev

使用dplyr :: distinct合并重复项并保留唯一元素

来自分类Dev

如何使用纯JavaScript定位DOM中动态生成的非唯一元素?

来自分类Dev

在JQuery中使用唯一元素创建数组

来自分类Dev

如何使用R查找data.frame中唯一元素的坐标?

来自分类Dev

使用XSLT按属性选择唯一元素

来自分类Dev

使用dplyr :: distinct合并重复项并保留唯一元素

来自分类Dev

使用向量中的特定条件检查唯一元素

来自分类Dev

numpy广播以执行欧式距离矢量化

来自分类Dev

使用 Matlab/Octave 对两个矩阵的对应列的外积和进行矢量化

Related 相关文章

  1. 1

    numpy:一次对几列进行矢量化访问?

  2. 2

    通过唯一元素对值进行分组

  3. 3

    对向量的每个唯一元素使用roxofun

  4. 4

    无法在使用 selenium 和 python 的网页抓取期间识别唯一元素

  5. 5

    Numpy中的矢量化-广播

  6. 6

    使用numpy vectorize在2D数组中仅在一个轴上进行矢量化

  7. 7

    在计算距离和 np.sum 上优化 numpy 矢量化

  8. 8

    循环变量感知numpy的切片和矢量化计算

  9. 9

    numpy中Kronecker产品的双循环矢量化和整形

  10. 10

    如何使用scala根据某些元素从元组列表中查找唯一元素?

  11. 11

    基于一维唯一元素过滤numpy结构化数组

  12. 12

    具有唯一元素的np数组行

  13. 13

    循环遍历R中列表中的唯一元素对

  14. 14

    在Numpy数组中查找非唯一元素的索引

  15. 15

    在Excel 2010中的时间间隔内对唯一元素进行分组

  16. 16

    如何按日期时间对具有唯一元素的数组进行排序(Python)

  17. 17

    如何在python中的列表中找到唯一元素?(不使用设置)

  18. 18

    如何使用R查找data.frame中唯一元素的坐标?

  19. 19

    如何使用Go的text / template包返回数组中的唯一元素?

  20. 20

    使用唯一元素创建所有可能的子序列

  21. 21

    使用dplyr :: distinct合并重复项并保留唯一元素

  22. 22

    如何使用纯JavaScript定位DOM中动态生成的非唯一元素?

  23. 23

    在JQuery中使用唯一元素创建数组

  24. 24

    如何使用R查找data.frame中唯一元素的坐标?

  25. 25

    使用XSLT按属性选择唯一元素

  26. 26

    使用dplyr :: distinct合并重复项并保留唯一元素

  27. 27

    使用向量中的特定条件检查唯一元素

  28. 28

    numpy广播以执行欧式距离矢量化

  29. 29

    使用 Matlab/Octave 对两个矩阵的对应列的外积和进行矢量化

热门标签

归档