计算 nd 数组中相同子数组的最快方法?

2023-12-01

让我们考虑一个二维数组A

2   3   5   7
2   3   5   7
1   7   1   4
5   8   6   0
2   3   5   7

第一行、第二行和最后一行是相同的。我正在寻找的算法应该返回每个不同行的相同行数(=每个元素的重复项数)。如果可以轻松修改脚本以也计算相同列的数量,那就太好了。

我使用一种低效的朴素算法来做到这一点:

import numpy
A=numpy.array([[2,  3,  5,  7],[2,  3,  5,  7],[1,  7,  1,  4],[5,  8,  6,  0],[2,  3,  5,  7]])
i=0
end = len(A)
while i<end:
    print i,
    j=i+1
    numberID = 1
    while j<end:
        print j
        if numpy.array_equal(A[i,:] ,A[j,:]):
            numberID+=1
        j+=1
    i+=1
print A, len(A)

预期结果:

array([3,1,1]) # number identical arrays per line

我的算法看起来像是在 numpy 中使用本机 python,因此效率低下。感谢帮助。


在 unumpy >= 1.9.0 中,np.unique has a return_counts您可以将关键字参数与解决方案结合起来here获取计数:

b = np.ascontiguousarray(A).view(np.dtype((np.void, A.dtype.itemsize * A.shape[1])))
unq_a, unq_cnt = np.unique(b, return_counts=True)
unq_a = unq_a.view(A.dtype).reshape(-1, A.shape[1])

>>> unq_a
array([[1, 7, 1, 4],
       [2, 3, 5, 7],
       [5, 8, 6, 0]])

>>> unq_cnt
array([1, 3, 1])

在较旧的 numpy 中,您可以复制什么np.unique does,看起来像:

a_view = np.array(A, copy=True)
a_view = a_view.view(np.dtype((np.void,
                               a_view.dtype.itemsize*a_view.shape[1]))).ravel()
a_view.sort()
a_flag = np.concatenate(([True], a_view[1:] != a_view[:-1]))
a_unq = A[a_flag]
a_idx = np.concatenate(np.nonzero(a_flag) + ([a_view.size],))
a_cnt = np.diff(a_idx)

>>> a_unq
array([[1, 7, 1, 4],
       [2, 3, 5, 7],
       [5, 8, 6, 0]])

>>> a_cnt
array([1, 3, 1])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算 nd 数组中相同子数组的最快方法? 的相关文章

随机推荐

  • 从外部应用程序枚举浏览器选项卡

    有点奇怪 具有挑战性 的问题 是否可以从外部应用程序以编程方式访问打开的浏览器的选项卡 我知道这是一个模糊的问题 但请听我说完 我正在尝试创建一个 Gmail 聊天通知程序 应用程序 当存在未答复的聊天消息时 该应用程序会在 Windows
  • 当应用程序发送 401 时,Azure 应用程序网关抛出 502

    Azure 应用程序网关显示502 bad gateway error 当应用程序返回时401 or 500 errors 它应该发送应用程序发送的任何内容 但默认情况下它发送502 知道发生了什么以及有任何配置或代码更改建议吗 EDIT
  • Laravel 5.8 中未捕获的错误“找不到类”

    我正在尝试从另一个文件夹调用我的模型文件 我已经提供了这两个文件结构 我收到此错误 未捕获错误 在 Applications XAMPP xamppfiles htdocs pro app Scr ipts Providers 1 Scra
  • 在 iOS Obj-C 中添加 Firebase 数据库引用的位置

    我正在通过 Firebase 设置实时数据库 但很困惑在哪里放置以下代码行 self ref FIRDatabase database reference 这些是我遵循的说明 https firebase google com docs d
  • Visual Studio - 附加到进程快捷方式

    当我想调试时 我必须执行 调试 gt 附加到进程 gt 在列表中查找进程 gt 附加 我想知道是否可以创建某种快捷方式来为我执行此操作 The shortcut is Ctrl Alt P in Visual Studio 2005 and
  • C++ DLL 调用 C# DLL 的选项有哪些?

    我有一个 C DLL 需要调用 C 类库中的函数 传递值 返回值 我唯一的选择是为 C DLL 提供 COM 接口并使用 IDispatch 从 C 调用它吗 这是最好的方法吗 这里有几个选项可供您选择 使用混合模式 C CLI 程序集作为
  • Google 地图 V3 邮政编码未返回

    我对谷歌地理编码结果有疑问 我正在对法国城市进行地理编码并希望获取其邮政编码 我的问题是 Google 响应了除邮政编码之外的所有数据 例如 对于 Ach re City 我得到了 address components 结果 Object
  • 使用 C# 修复不受信任数据的反序列化

    我有以下相关的 C 代码 json File ReadAllText path isStudentObject JsonConvert DeserializeObject
  • url 中的双转义序列:请求过滤模块被配置为拒绝包含双转义序列的请求

    在我的 ASP NET MVC 应用程序中 我尝试实现如下所示的 URL 产品 标签 for families 当我尝试使用默认配置运行应用程序时 我收到此消息 其中包含 404 11 响应代码 HTTP 错误 404 11 未找到 请求过
  • 如何使用范围和字符串比较来减少代码的运行时间

    我有以下代码 它完全按照我需要的方式执行 但是 循环运行时间太长 3 分钟以上 我是 VBA 新手 所以我不太确定 1 最好的替代方案是什么 2 如何为该替代方案使用正确的语法并使我的代码完美运行 谢谢 Dim i As Integer F
  • R图-在一点画一个大圆

    我怎样才能提出一个大的 没有彩色圆圈的点 x0 和 y0 只是具有 1 值的列表 所以这只是绘制一个值 points x x0 y y0 col green pch 16 但圆圈有点小 而且是彩色的 要使单个绘图字符更大 请使用cex as
  • 按填充子集对堆叠条中的 x 轴进行排序

    有多个问题 here例如 如何在条形图中按频率排列 x 轴ggplot2 但是 我的目标是根据填充子集的相对频率在堆积条形图中的 X 轴上排列类别 例如 我想按类别的百分比对 x 轴进行排序B在变量中z 这是我第一次尝试仅使用 ggplot
  • 将 WCF 合约移至单独的 dll

    我想将 WCF 合约接口移至第三个 DLL 并在手动生成代理时开始从客户端使用它们 DLL中的那些接口必须有吗 ServiceContract 当我从客户端使用它们来生成代理时属性 知道 Dll 的最佳命名是什么吗 它只有合同和 DTO 在
  • 面临 Visual Studio 2015 和 2013 的突然崩溃

    我最近几天面临这个问题 我的 Visual studio 2015 突然崩溃 在检查应用程序事件日志时 我发现对于每次崩溃 都会在其中输入以下日志 Faulting application name devenv exe version 1
  • 当对 XML 中的节点值求和时,SQL Server 出现奇怪的行为

    我问一个关于求和节点值的问题 对 sql server 2008 中的一些 xml 节点值求和 请考虑这段代码 Declare xml xml set xml
  • window.history.back() 显示“文档已过期”页面,有什么办法吗?

    客户要求用户能够在单击结果后返回到充满搜索结果的页面 现在这是一个简单的 jQuery 调用 a detail back button on click function evt evt preventDefault window hist
  • 使用 javascript 填充角度输入

    设置元素的value不管用 它的行为不像用户输入 当我提交此输入时 弹出窗口告诉我我根本没有填写输入 如何像用户一样填充这个输入元素 div class login input input group div
  • 通用 Windows 平台上的递归 XAML 绑定数据模板

    所以我有一个任务类 它有几个属性 并且里面还可以有一个任务对象列表 子任务 我想在 UWP 上递归显示每个任务及其子任务 根据这篇文章 显然 WPF 为此目的有特殊的 UserControls 递归数据模板可能吗 但它们似乎在 UWP 上不
  • 如何在 Chart.js 中指定刻度位置?

    我正在寻找一种方法来手动指定 x y 刻度位置chart js图表 相当于 matplotlib 的matplotlib pyplot xticks 该文档解释了如何创建自定义刻度格式 但这适用于自动计算的刻度位置 如何指定刻度位置 这是我
  • 计算 nd 数组中相同子数组的最快方法?

    让我们考虑一个二维数组A 2 3 5 7 2 3 5 7 1 7 1 4 5 8 6 0 2 3 5 7 第一行 第二行和最后一行是相同的 我正在寻找的算法应该返回每个不同行的相同行数 每个元素的重复项数 如果可以轻松修改脚本以也计算相同列