沿给定轴打乱 NumPy 数组

2024-02-08

给定以下 NumPy 数组,

> a = array([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5],[1, 2, 3, 4, 5]])

洗牌单行很简单,

> shuffle(a[0])
> a
array([[4, 2, 1, 3, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]])

是否可以使用索引符号来独立地打乱每行?或者您是否必须迭代数组。我想到的是,

> numpy.shuffle(a[:])
> a
array([[4, 2, 3, 5, 1],[3, 1, 4, 5, 2],[4, 2, 1, 3, 5]]) # Not the real output

尽管这显然行不通。


矢量化解决方案rand+argsort trick

我们可以沿着指定的轴生成唯一的索引,并使用以下命令索引到输入数组中advanced-indexing。为了生成唯一索引,我们将使用random float generation + sort trick https://stackoverflow.com/a/45438143/,从而给我们一个矢量化的解决方案。我们还将对其进行概括以涵盖通用的n-dim数组和泛型axes with np.take_along_axis https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.take_along_axis.html。最终的实现看起来像这样 -

def shuffle_along_axis(a, axis):
    idx = np.random.rand(*a.shape).argsort(axis=axis)
    return np.take_along_axis(a,idx,axis=axis)

请注意,此随机播放不会就地进行,并返回一个随机播放的副本。

样本运行 -

In [33]: a
Out[33]: 
array([[18, 95, 45, 33],
       [40, 78, 31, 52],
       [75, 49, 42, 94]])

In [34]: shuffle_along_axis(a, axis=0)
Out[34]: 
array([[75, 78, 42, 94],
       [40, 49, 45, 52],
       [18, 95, 31, 33]])

In [35]: shuffle_along_axis(a, axis=1)
Out[35]: 
array([[45, 18, 33, 95],
       [31, 78, 52, 40],
       [42, 75, 94, 49]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

沿给定轴打乱 NumPy 数组 的相关文章

随机推荐

  • Firebase 数据库安全,无需 Firebase 身份验证

    我在 Play 商店上发布了一个应用程序 我想在该应用程序中实现 firebase 我已阅读所有文档 但有两个疑问 如果有人在我的应用程序中使用 apk 反编译器并获取 google services json 他们可以对数据库做任何他们想
  • 如何将 CKFinder 与 Laravel 集成?

    我正在尝试将 CKFinder 与 Laravel 集成 我已经完成了 95 左右 我可以让一切正常工作 除了CheckAuthentication功能 我必须做到return true无论上传是否有效 我尝试做的是在 config php
  • 如何获取按计数列排序的组

    很难用简单的英语问这个问题 所以我会展示我正在尝试做的事情 这是我的 SQL 代码 select top 100 Name COUNT Name as total from ActivityLog where Timestamp betwe
  • 如何预加载 .net 程序集

    在我的工作中 我们正在使用 net Framework 4开发不同的应用程序 所有应用程序都使用我们开发的通用程序集 例如data dll中的数据层 这些应用程序驻留在网络驱动器上并直接从那里启动 大多数大型应用程序第一次启动 冷启动 需要
  • 在python中将数字表示为二的幂之和的最快方法是什么

    例如 gt gt gt two powers 42 gt gt gt 2 8 32 我目前的幼稚实现 取自here https stackoverflow com a 27936818 1177288 看起来像那样 def two powe
  • 如何优雅地停止单节点 kubernetes 集群

    我已经根据 官方教程 1 设置了单节点kubernetes 除了官方文档之外 我还设置了单节点集群 kubectl taint nodes all node role kubernetes io master 残疾人驱逐限制 cat lt
  • Windows 窗体,从父窗体获取属性

    我遇到了一点问题 我在父表单中有一个数据表 我打开一个对话框表单 获取数据表属性并创建一个复选框列表 这将用于导出这些列 但是当我运行应用程序时 parentform 属性为空 我尝试在父窗体和对话框窗体中设置它 我假设如果调用 ShowD
  • 我在哪里弄乱了输出格式?

    因此 当我尝试运行代码时收到一条错误消息 但我无法弄清楚问题到底是什么 它说这是一个 ValueError 但我不知道到底是哪一个 也许只是迟到了 但我却不知所措 这是我的代码 def sort count dict avg scores
  • 为Android应用程序设置图标

    如何为我的 Android 应用程序设置图标 如果您希望您的应用程序在多种设备上可用 您应该将应用程序图标放在不同的位置res drawable 提供的文件夹 在每个文件夹中 您应该包含一个 48dp 大小的图标 drawable ldpi
  • go helm 图表模板中的循环[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试在 kubernetes helm 图表中循环计数 如下所示 reaction mongo url big mongodb for m
  • TypeScript 将camelCase 键转换为snake_case

    想象一下 我们有一些具有驼峰命名法属性的对象类型 type Foo propertyBob string propertyJane number 有没有办法创建一个将camelCase转换为snake case的泛型 例如 type foo
  • 发布操作:“提交助手应用程序时出错”,没有显示错误

    我正在尝试发布我的第一个 Google Assistant 操作 但在尝试提交应用程序时 控制台告诉我 提交助理应用程序时出错 但没有任何详细信息 是否有任何日志或其他内容可以为我提供有关在提交之前需要修复的更多详细信息 我迷路了 谢谢 许
  • Pytorch RuntimeError:CUDA 内存不足且有大量可用内存

    在训练模型时 我遇到了以下问题 RuntimeError CUDA out of memory Tried to allocate 304 00 MiB GPU 0 8 00 GiB total capacity 142 76 MiB al
  • 使用 NetBeans 6.8 进行 XSLT 自动完成

    我记得当时NetBeans 6中支持XSLT 现在我使用NetBeans 6 8 但仍然找不到这样的插件 你能帮助我吗 工具 gt 插件 gt 设置添加http updates netbeans org netbeans updates 6
  • 优化TreeView方法

    我有一个非常大的方法可以插入子元素TreeView 基本上我做了两个不同的查询 并在 I N 上设置了很小的更改 第一个 foreach 插入父级的第一个子级 第二个 foreach 插入之前创建的子级的子级 Foreach查询只是改变条件
  • Android 兼容包不包含 Activity.getFragmentManager()

    我开始尝试使用 3 月 3 日刚刚发布的 Android 兼容包向我的 Android 应用程序添加片段 该应用程序基于 2 1 我将该库包含到我的项目中 并开始将代码从基于 Activity 的类移动到基于 Fragment 的类 但我注
  • 如何在复杂的单元格中找到元素?

    我有一个复杂的元胞数组 例如 A 1 2 3 4 5 6 7 8 9 10 如何找到A中的元素 例如 我想检查 9 是否在 A 中 如果您的元胞数组可以有任意数量的嵌套级别 则只需递归所有级别即可检查值 这是一个可以执行此操作的函数 fun
  • iPhone:如何使用 Xcode 向 Web 服务发送 HTTP 请求

    如何使用 Objective C 向 Web 服务发送 HTTP 请求 我需要从 MySQL 数据库中获取一些数据 因此我需要发送请求以便获取数据 编辑 因为这是一个热门问题 而且时间在不断流逝 与此同时 Apple 引入了 NSJSONS
  • 使用第三方库和 Carthage 进行单元测试

    使用 Carthage 进行依赖管理的正确方法是什么 而且还能够用它为其引入的类型编写测试 例如 这是假设的 如果我引入 AlamoFire 并假设它有一个响应协议和不同的协议具体类型符合响应协议 在我自己的图书馆里 如果我要做的话 tes
  • 沿给定轴打乱 NumPy 数组

    给定以下 NumPy 数组 gt a array 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 洗牌单行很简单 gt shuffle a 0 gt a array 4 2 1 3 5 1 2 3 4 5 1 2 3 4 5 是