MATLAB 对 2D 和 3D 矩阵进行排序并通过索引访问

2024-03-12

假设你有一个一维矩阵

a = rand(1,5);
[sa i] = sort(a);

then sa and a(i)是相同的。然而,如果矩阵的大小增加

a = rand(3,4);
[sa i] = sort(a);

then sa and a(i)不一样。当我尝试按三维矩阵的第三个维度对三维矩阵进行排序时,也会发生同样的情况。

我如何访问的值a通过索引i?或者换句话说,我如何计算sa=a(X), what X应该?

Edit:

感谢您的解决方案。但是,当您更改排序依据的维度时,它们不起作用。尽管如此,我还是接受了这个想法并用它来构建一个通用的形式。

该算法所做的就是构建矩阵的索引。 MATLAB 按列索引单元格。因此,该指数由下式给出

idx = r + (c-1)*ROWS + (p-1)*ROWS*COLS

where, idx是索引,r是行位置,c是列位置,并且p是页面位置。

因此,如果我们按第一维排序(正常sort(a)) 结果索引是列中的位置;如果我们在第二个维度排序,结果索引就是行中的位置;如果我们在第三维排序,结果索引就是页面位置。话虽这么说,它最后只生成给定情况的行和列:

r = repmat((1:rows)',[1 cols pages]);
c = repmat(1:cols,[rows 1 pages]);

给出的解决方案中解释了第一维的排序。然后,让我们对二维数组的第二个维度(按行)进行排序

a = rand(4,5);
[rows cols pages] = size(a);
R = repmat((1:rows)',[1 cols pages]);
[sa idx] = sort(a,2);
nIdx = R + (idx-1)*rows;
isequal(sa,a(nIdx))

现在,如果我们使用相同的想法在第三维(按页面)排序,我们需要做

a = rand(4,5,3);
[rows cols pages] = size(a);
R = repmat((1:rows)',[1 cols pages]);
C = repmat(1:cols,[rows 1 pages]);
[sa idx] = sort(a,3);
nIdx = R + (C-1)*rows + (idx-1)*rows*cols;
isequal(sa,a(nIdx))

并且可以使用相同的逻辑将其扩展到N维。 感谢您的帮助,您照亮了道路。 :)


[sa, i]=sort(a)返回每列的有序索引。您只需要获得矩阵的正确线性索引即可。因此,对于二维矩阵,

A=rand(3,4);
[rows,cols]=size(A);
[B,index]=sort(A,1);
correctedIndex=index+repmat(0:cols-1,rows,1)*rows;

现在测试一下:

A =

    0.9572    0.1419    0.7922    0.0357
    0.4854    0.4218    0.9595    0.8491
    0.8003    0.9157    0.6557    0.9340

B =

    0.4854    0.1419    0.6557    0.0357
    0.8003    0.4218    0.7922    0.8491
    0.9572    0.9157    0.9595    0.9340

A(correctedIndex)

ans =

    0.4854    0.1419    0.6557    0.0357
    0.8003    0.4218    0.7922    0.8491
    0.9572    0.9157    0.9595    0.9340
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB 对 2D 和 3D 矩阵进行排序并通过索引访问 的相关文章

  • 从 .NET 文本中提取关键字

    我需要计算每个关键字在字符串中重复出现的次数 并按最高次数排序 NET 代码中用于此目的的最快算法是什么 编辑 下面的代码将唯一标记与计数分组 string target src Split new char var results tar
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 获取列表中倒数第二个元素[重复]

    这个问题在这里已经有答案了 我可以通过以下方式获取列表的倒数第二个元素 gt gt gt lst a b c d e f gt gt gt print lst len lst 2 e 有没有比使用更好的方法print lst len lst
  • DBMS 中的阻塞因素

    DBMS 中的阻塞因素是什么 我查看的位表示它是每个记录的块的下限值 因此 B R 下限 其中 B 是块大小 R 是记录 我只是想知道 有人可以告诉我它使用的主要原因 以及它是否真的是地板 我对 FLOORED 的理解是 1 5 降到 1
  • 图像分析-光纤识别

    我是图像分析新手 您知道如何以仅获取纤维的方式对该图像进行二值化吗 我尝试过不同的阈值技术等 但没有成功 我不介意应该使用什么工具 但我更喜欢 NET or Matlab PS 我不知道该把答案放在哪里 所以我把它放在StackOverfl
  • 多级排序

    我有一个表 其中包含一些记录 其中包含名称 评级等字段 我首先想要根据评级将结果限制为 20 进行排序 然后在此结果集上想要进一步应用基于名称的排序 我知道要排序我们需要使用像这样的查询 Select from table order by
  • 继续在 Matlab 中一遍又一遍地播放声音?

    我正在尝试创建一个 MATLAB 程序来每隔几分钟一遍又一遍地播放声音 现在我将其设置为每隔几秒播放一次 只是为了消除系统中的一些错误 但是 当我的程序尝试重播声音时 我收到此错误 Error using gt audioplayer au
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 仅使用行中包含的值获取 JTable 中的行索引?

    在Java中 JTable中是否可以通过查找该行中包含的指定值来获取该行的索引 我正在使用自定义表格模型 例如 考虑一个包含三列和三行的表 Row 1 A B C Row 2 D E F Row 3 G H I 如果我只知道表中某处有一个值
  • 在C中分配矩阵

    我想分配一个矩阵 这是唯一的选择吗 int mat int malloc rows sizeof int for int index 0 index
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 如何按文件大小对查找结果进行排序

    如何按文件大小对 find 命令的结果进行排序 我试图对这个 find 命令的结果进行排序 find src type f print0 我不需要目录的大小 我需要仅按大小排序的文件相对路径 这是如何做的using find command
  • sql中的拓扑排序

    我正在解决表中某些对象之间的依赖关系 我必须对对象做一些事情来排序它们的依赖性 例如 第一个对象不依赖于任何对象 第二个和第三个取决于第一个 依此类推 我必须使用拓扑排序 http en wikipedia org wiki Topolog
  • Pandas:根据其他多级列对最里面的列进行分组排序

    考虑下面的 df In 3771 df pd DataFrame A a 11 B b 11 C C1 C1 C2 C1 C3 C3 C2 C3 C3 C2 C2 D D1 D2 D1 D3 D3 D2 D4 D4 D1 D2 D3 E v
  • numpy.linalg.inv() 是否给出了正确的矩阵逆?编辑:为什么 inv() 给出数值错误?

    我有一个矩阵形状 4000 4000 我想取逆矩阵 我对逆矩阵的直觉因如此大的矩阵而崩溃 起始矩阵的值大小为e 10 具有以下值 print matrix给出一个输出 2 19885119e 10 2 16462810e 10 2 1306
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • Perl:散列 2 中数组的数值排序(施瓦茨变换)

    这实际上是该线程的后续内容 Perl 散列中数组的数字排序 https stackoverflow com questions 7914931 perl numerical sort of arrays in a hash 我无法编辑原始问
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2

随机推荐

  • GPU 上的高效全对集交集

    I have n集合 有限宇宙的子集 我想计算n n矩阵 其中 I J 条目包含集合交集的基数I并设置J n的顺序是50000 我的想法是将矩阵分割成足够小的块 以便每个条目都有一个线程 每个线程都应该使用以下方法计算交集bitwise a
  • 为什么 UIElement.MoveFocus() 不将焦点移动到 ListBox 中的下一个同级元素?

    我有以下视觉树
  • 访问 Android Stock 浏览器设置

    我想通过代码访问 和更改 库存 Android 浏览器的设置 这可能吗 如果可能的话 如何 是的 这是编程问题 我想通过代码更改它 而不是通过手动单击 对 root 设备执行此操作怎么样 Android 的操作系统级安全模型基本上可以防止这
  • PyQt 允许枚举值和字符串

    在 PySide 中 我可以通过使用获取具有可能 允许的枚举值及其字符串表示形式的字典values属性 例如 QtWidgets QMessageBox StandardButton values items 如何在 PyQt4 PyQt5
  • 为什么禁用的 JavaFX TextArea 的颜色与 TextField 不同

    我正在重新设计 JavaFX 应用程序 但我有一个问题 disabled风格 当我尝试改变 fx text fill and fx opacity settings 文本区域的文本颜色仍然比文本字段稍浅 这是我现在得到的风格 Text Fi
  • AppDelegate.m 用于 FBSDK 和 LinkingManager

    要使用 FBSDK 我需要在应用程序委托中使用此代码片段 BOOL application UIApplication application openURL NSURL url sourceApplication NSString sou
  • 使用学习的人工神经网络来解决输入

    我最近再次深入研究人工神经网络 包括进化和训练 我有一个问题 关于什么方法 如果有的话 可以解决导致目标输出集的输入 这个有名字吗 我试图寻找的一切都会导致我进行反向传播 但这不一定是我所需要的 在我的搜索中 我最接近表达我的问题的是 是否
  • 为什么 tailwind css 类名中有一个反斜杠?

    我正在尝试学习和使用最近非常流行的新实用程序框架 顺风CSS https tailwindcss com 当我使用文档中的说明编译 css 时 我看到很多 css 类名都有冒号 其中 前面有一个反斜杠 这是为什么 是为了让CSS明白有一个
  • Vagrant + Xdebug + Atom

    我有一个安装了 xdebug 的 vagrant box 在 OSX 上运行 但我很难获取 Atom xdebug 插件 php debug 连接到它 我粘贴了phpinfo 将数据输入 xdebug 验证站点 结果显示一切正常 并且您可以
  • 使用短信验证设备的电话号码

    我正在尝试通过让设备向自身发送短信并自动检查是否已收到短信来验证 Android 设备的电话号码 我怎样才能做到这一点 首先 这需要两个权限 一种用于发送短信 另一种用于接收短信 以下内容需要在您的 AndroidManifest xml
  • navigationToURL 通过 POST 发送数据到 php 页面

    想象一下 我在 Flash 应用程序中有一个表单 其中包含两个字段 input1 和 input2 当用户填写完此表单后 它会转到 php 页面 目前 我正在使用 GET方法发送数据 像这样 var request URLRequest r
  • SIM卡认证

    我是 SIM 卡新手 我正在尝试使用 Gemalto JCardManager 金雅拓开发人员套件的一部分 和 Gemplus USB 智能卡读卡器对 SIM 卡进行身份验证 显然 我拥有所有必要的密钥 kic kid 和 kik 但我无法
  • vuetifyjs:仅添加使用过的图标来构建

    我目前正在使用默认的 Material Design Icons 构建一个 vuetifyjs app 在生产版本中 我仅使用该字体的 2 个图标 由 vuetify 组件芯片使用 按照建议 我包含了完整的 iconfont 但生产版本迫使
  • FormsAuthentication 对象已过时 [使用 MVC5]

    我在 MVC5 站点中使用以下代码 HttpPost ValidateAntiForgeryToken public ActionResult Login LoginModel loginModel if ModelState IsVali
  • 从 Matlab 调用 R

    我曾经能够通过系统调用从 Matlab 调用 R system usr bin R no save lt myscript R 但现在 使用 Matlab R2012b 和 R 版本 3 0 0 2013 04 03 Masked Marv
  • Android - 在单独的类中使用共享首选项?

    我想使用 android 中的共享首选项保存数据 但我希望使用单独的类来完成这项任务 我已经实现了该类 如下所示 import android content Context import android content SharedPre
  • 不变函子的例子?

    我正在阅读monad 层包的文档 http hackage haskell org package layers 0 1 docs Documentation Layers Overview html我的大脑快要沸腾了 In the mmt
  • 如何配置 gradle 仅对某些依赖项组使用本地存储库?

    工作关 闭gradle 依赖文档 http www gradle org dependency management html 我们有一个包含这样的片段的 build gradle repositories mavenCentral ivy
  • RijndaelManaged:第四代?

    我想在我的应用程序中实现最安全 最可靠的对称密钥加密形式 用户应该输入密码来加密 解密 仅此而已 对于 RijndaelManaged 必须输入密钥和 IV 我不知道如何解决这种情况 现在 我输入的密码经过 SHA256 哈希处理 然后用作
  • MATLAB 对 2D 和 3D 矩阵进行排序并通过索引访问

    假设你有一个一维矩阵 a rand 1 5 sa i sort a then sa and a i 是相同的 然而 如果矩阵的大小增加 a rand 3 4 sa i sort a then sa and a i 不一样 当我尝试按三维矩阵