如何在不使用 for 循环的情况下对不同大小的矩阵的各个部分求和?

2024-03-10

我有一个相对较大的矩阵 NxN (N~20,000) 和一个 Nx1 向量,用于标识必须分组在一起的索引。

我想将矩阵的各个部分相加,原则上可以有不同数量的元素和非相邻元素。 我很快写了一个双 for 循环,它可以正常工作,但当然效率很低。探查器将这些循环识别为我的代码中的瓶颈之一。

我试图找到一种智能矢量化方法来解决这个问题。我探索了arrayfun, cellfun, and bsxfun函数,并寻找类似问题的解决方案......但我还没有找到最终的解决方案。

这是带有两个 for 循环的测试代码:

M=rand(10); % test matrix
idxM=[1 2 2 3 4 4 4 1 4 2]; % each element indicates to which group each row/column of M belongs
nT=size(M,1);
sumM=zeros(max(idxM),max(idxM));
for t1=1:nT
    for t2=1:nT
        sumM(t1,t2) = sum(sum(M(idxM==t1,idxM==t2)));
    end
end

您可以使用accumarray https://es.mathworks.com/help/matlab/ref/accumarray.html如下:

nT = size(M,1); % or nT = max(idxM)
ind = bsxfun(@plus, idxM(:), (idxM(:).'-1)*nT); % create linear indices for grouping
sumM = accumarray(ind(:), M(:), [nT^2 1]); % compute sum of each group
sumM = reshape(sumM, [nT nT]); % reshape obtain the final result
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用 for 循环的情况下对不同大小的矩阵的各个部分求和? 的相关文章

  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • MATLAB 滚动图

    我有一个脑电图数据库 我想绘制它 数据库是一个19 1000 134的矩阵 其中 19 是通道数 在第一种方法中 我只使用一个渠道 1000 个样本大小 采样率为 500 Hz 时为 1000 个点 即 2 秒数据 134 epochs的数
  • MPI - 发送和接收列

    我需要从一个进程发送矩阵列并从另一个进程接收它 我尝试运行以下程序 但得到了一个奇怪的结果 至少我这么认为 仅复制矩阵的第一个元素 某些矩阵元素会发生意外变化 include
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 句柄类和值类的区别

    我有一些 C 背景 想使用 Matlab 中的类 句柄和值类有什么区别 我知道如果我想定义一个带有重载运算符 例如 和 的矩阵类 我会使用值类 然而 有时 当我选择一个手柄类时 事情似乎只对我有用 MathWorks 提供了一些有关其用途的
  • 对二进制二维矩阵进行排序?

    我在这里寻找一些指示 因为我不太知道从哪里开始研究这个 我有一个二维矩阵 每个单元格中有 0 或 1 例如 1 2 3 4 A 0 1 1 0 B 1 1 1 0 C 0 1 0 0 D 1 1 0 0 我想对其进行排序 使其尽可能 上三角
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • R 将向量重塑为多列

    假设我在 R 中有一个向量 如下所示 d lt seq 1 100 我想将这个向量重塑为 10x10 矩阵 这样我就可以得到以下数据 1 2 3 10 1 2 3 10 11 12 13 20 21 22 23 30 91 92 93 10
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 缓存友好的矩阵移位功能

    我想将二维方阵的第一行移到最后一行 所以如果我有一个像A这样的矩阵 我想要得到B 我可以使用两个简单的 for 循环来做到这一点 例如 void shift int M int N int A M N int i j temp for i
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

    我希望在数据帧中的每一行的局部范围内进行计算 同时避免速度缓慢for环形 例如 对于下面数据中的每一行 我想找到未来 3 天内 包括当天 的最高气温以及未来 3 天内的总降雨量 Day Temperature Rain 0 30 4 1 3
  • R 中的快速 QR 分解

    我有大量矩阵 需要对其执行 QR 分解并存储生成的 Q 矩阵 进行归一化 以便 R 矩阵在其对角线上具有正数 除了使用之外还有其他方法吗qr 功能 这是工作示例 system time Parameters for the matrix t
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得

随机推荐

  • Android Room Multimap 相同列名称的问题

    如中所述官方文档 https developer android com training data storage room relationships multimap 最好对 Android Room 数据库使用 Multimap 返
  • 减少撰写中可滚动选项卡之间的间距

    我正在尝试创建一个动画 其中有水平滚动的可滚动组件 就像是 我想过使用可滚动选项卡 它在某种程度上有效 除了我仍在研究如何减少您在上面的 gif 中看到的裁剪项目之间的空间 我已经尝试过什么 Composable fun CropBar o
  • 如何在angular2 router3中为子路由指定辅助组件

    我正在使用新的route3 并且想知道为子路由指定辅助组件的URL 语法是什么 我有以下子路由定义 const router RouterConfig path component c component ComponentC childr
  • 为什么要重新抛出异常

    在 C 中 为什么要重新抛出异常 为什么不让当前的catch块处理异常呢 出于什么原因 您会将异常重新抛出到另一个 try catch 块 当函数无法满足其约定 它向调用者承诺它将执行的操作 时 会引发异常 当一个函数调用另一个抛出异常的函
  • Asp.Net MVC 输入验证在禁用后仍然触发

    我已经禁用了validateRequest在我的 web Config 中 但应用程序仍然引发错误 从客户端检测到潜在危险的 Request Form 值 我的 web Config 中有以下内容
  • 如何使用 Javascript 从输入字段获取值?

    如何使用 Javascript 获取特定输入字段的值 我们以这家shopify商店为例 https geekymate com products magic doormat 1 variant 18941211607138 https ge
  • 如何在 Swift 3 中使用带有浮点值的 sin(_ : ) [重复]

    这个问题在这里已经有答案了 import Foundation public func sine
  • 无需管理员权限即可启动和停止 Windows 服务

    如何在没有管理员权限的情况下启动和停止窗口服务 我的应用程序启动应该以与关闭后必须停止的方式相同的方式启动我的服务 我可以使用 服务控制器 来做到这一点 我可以使用管理员权限安装该服务 但启动和停止该服务不应要求管理员权限 谁能告诉我如何使
  • SSLProtocolException 建立 https 连接

    当我与网络服务器建立 https 连接时 出现 SSLProtocolException 我只在 Android 2 3 Gingebread 中有这个例外 相同的代码在所有其他 Android 版本中都可以正常工作 这个安卓版本有问题吗
  • 并非所有字节都读取常见解决方案

    在这篇文章中 我将详细介绍导致神秘错误消息的原因 Smart contract panicked panicked at Cannot deserialize the contract state Custom kind InvalidDa
  • 以编程方式修改 ActionBarDrawerToggle Drawable

    有谁知道在构造函数中通过资源 ID 设置用于 ActionBarDrawerToggle 的可绘制对象的方法吗 我正在使用导航抽屉 我想以编程方式将颜色过滤器应用于图标 但我不知道如何将其作为可绘制对象进行访问 任何帮助 将不胜感激 谢谢
  • 试运行中的 sed 命令

    如何进行空运行sed 我有这个命令 find type f xargs sed i s string1 string2 g 但在我真正替换所有文件之前 我想检查它会替换什么 复制整个目录结构来检查是不可能的 去除 i并将其通过管道传输到le
  • 通过 aws ses 发送带有 Node.js 附件的邮件

    有谁有一些如何发送带有附件的电子邮件的示例node js与 aws ses 一起吗 如果你想避免痛苦 你必须使用 Nodemailer 包装的 SES 直接使用AWS SDK 您无法使用以下方式发送附件ses sendEmail 你必须使用
  • 如何在不下载的情况下计算AWS S3中zip内的文件数量?

    案件 S3 存储桶中有一个很大的 zip 文件 其中包含大量图像 有没有一种方法无需下载整个文件即可读取元数据或知道 zip 文件中有多少个文件 当文件是本地文件时 在 python 中 我可以将其作为 zipfile 打开 然后调用 na
  • 如何强制编译器使用显式复制构造函数?

    我编写了一个小型测试程序 其中包含一个示例类 其中还包含自定义构造函数 析构函数 复制构造函数和赋值运算符 当我意识到复制构造函数根本没有被调用时 我感到很惊讶 即使我实现了带有我的类的返回值和像这样的行的函数Object o1 Objec
  • 为什么 openGL glDepthFunc() 不起作用?

    我正在玩 openGL 我试图摆脱蓝色标记的三角形 我用这个代码 glEnable GL DEPTH TEST glDepthFunc GL LESS glEnable GL CULL FACE 是的 我用 glClear GL COLOR
  • Matplotlib - 单值等高线图

    我想绘制一些数据的等值线图 但字段中的所有值可能都相同 这会导致 matplotlib 中出现错误 这是有道理的 因为实际上没有要创建的轮廓 例如 如果你运行下面的代码 你会得到一个错误 但删除第二个定义zi它按预期运行 如果某些数据是均匀
  • PowerShell 从远程 PC 删除桌面项目

    我有 200 台电脑需要删除一些特定的图标 我使用 ComputerName 创建了一个 CSV 文件 每行 1 个名称 我有另一个文件 其中包含需要从桌面删除的图标的文件名 Shortcut1 lnk 等 该其他文件也是 CSV 每行 1
  • 强制执行必须在*不同*字段中的每个子类中实现的属性的最佳方法是什么?

    我正在尝试想出 最好 的实施方式SQL 数据服务灵活的实体模型 http msdn microsoft com en us library cc512402 aspx其中每个类都可以存储为一个实体 甚至派生类 示例 每个子类都有不同的 st
  • 如何在不使用 for 循环的情况下对不同大小的矩阵的各个部分求和?

    我有一个相对较大的矩阵 NxN N 20 000 和一个 Nx1 向量 用于标识必须分组在一起的索引 我想将矩阵的各个部分相加 原则上可以有不同数量的元素和非相邻元素 我很快写了一个双 for 循环 它可以正常工作 但当然效率很低 探查器将