如何使用Matlab的bsxfun求解累加和

2024-02-13

我有以下(慢)代码:

% A is n-by-m matrix
% B is n-by-m-by-d matrix
% C is n-by-m-by-d matrix
% R is 1-by-d vector

A=zeros(n,m);
for i=1:d
    A = A + sum(B(:,:,1:i),3).*(R(i)-C(:,:,i));
end

我想通过使用神奇的 bsxfun 来失去循环来提高它的效率。你能告诉我该怎么做吗?


这边走 -

A = sum(cumsum(B,3).*bsxfun(@minus,permute(R,[1 3 2]),C),3)

带尺寸参数n,m,d as 200每个,运行时间是

----------------------------------- With Proposed Approach
Elapsed time is 0.054771 seconds.
----------------------------------- With Original Approach
Elapsed time is 2.514884 seconds.

更多使用理由bsxfun http://in.mathworks.com/help/matlab/ref/bsxfun.html and vectorization http://in.mathworks.com/help/matlab/matlab_prog/vectorization.html!!


标杆管理

基准测试代码 -

n = 10;
m = 1000;
d = 3;
num_iter = 10000;

B = rand(n,m,d);
C = rand(n,m,d);
R = rand(1,d);

%// Warm up tic/toc.
for k = 1:100000
    tic(); elapsed = toc();
end

disp(['********************* d = ' num2str(d) ' ************************'])

disp('----------------------------------- With Proposed Approach')
tic
for iter = 1:num_iter
    A1 = sum(cumsum(B,3).*bsxfun(@minus,permute(R,[1 3 2]),C),3);
end
toc

disp('----------------------------------- With Original Approach')
tic
for iter = 1:num_iter
    
    A = zeros(n,m);
    for i=1:d
        A = A + sum(B(:,:,1:i),3).*(R(i)-C(:,:,i));
    end
end
toc

我最后的运行时间是 -

********************* d = 3 ************************
----------------------------------- With Proposed Approach
Elapsed time is 0.856972 seconds.
----------------------------------- With Original Approach
Elapsed time is 1.703564 seconds.



********************* d = 9 ************************
----------------------------------- With Proposed Approach
Elapsed time is 2.098253 seconds.
----------------------------------- With Original Approach
Elapsed time is 9.518418 seconds.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Matlab的bsxfun求解累加和 的相关文章

  • 用矩阵变换 3D 向量的方法

    我一直在阅读一些关于用矩阵转换 Vector3 的文章 并且正在努力深入研究数学并自己编码 而不是使用现有代码 无论出于何种原因 我的学校课程从未包含矩阵 所以我正在填补我的知识空白 值得庆幸的是 我认为我只需要一些简单的东西 背景是我正在
  • 仅使用 numpy 和 pandas 计算转换矩阵中每个单词的频率

    我正在尝试仅使用 numpy 和 pandas 来计算转换矩阵中每个单词的频率 我有一根绳子 star wars darth leia luke han chewbacca luke chewbacca obi chewbacca luke
  • 使用定制距离函数从 Pandas Dataframe 创建距离矩阵

    我有一个包含两列的 Pandas 数据框 id 唯一标识符 和 date 如下所示 test df head id date 0 N1 2020 01 31 1 N2 2020 02 28 2 N3 2020 03 10 我创建了一个自定义
  • CSR 矩阵 - 矩阵乘法

    我有两个方阵A and B 我必须转换B to CSR Format并确定产品C A B csr C 我在网上找到了很多关于CSR 矩阵 向量乘法 http www mathcs emory edu cheung Courses 561 S
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • 从 3 个向量创建等值线图

    我正在尝试根据这些数据创建等高线图 pH D Tur 5 10 3 79 18918919 5 50 6 92 97297297 5 00 0 50 09009009 5 00 6 90 36036036 5 10 9 91 0810810
  • MATLAB:MEX 矩阵除法给出的结果与 m 文件不同

    我使用 MATLAB 的编码器工具创建了矩阵指数函数的 MEX 版本 以在另一组函数中使用 问题是 MEX 版本给出的结果与原始 m 文件不同 经过调试 我认为这是因为MEX文件和m文件没有做相同的矩阵除法 或者 MEX 文件首先就有问题
  • numpy 向量化而不是 for 循环

    我用 Python 写了一些代码 运行良好 但速度很慢 我认为是由于 for 循环 我希望可以使用 numpy 命令加速以下操作 让我定义目标 假设我有一个 2D numpy 数组all CMs尺寸row x col 例如考虑一个6x11数
  • 如何使用 MATLAB 的“等值面”函数创建三角球体

    如何创建一个三角球体 其中每个三角形的面面积相同 我想要这样的东西 http imageshack us a img198 5041 71183923 png http imageshack us a img198 5041 7118392
  • Matlab 中的多行匿名函数? [复制]

    这个问题在这里已经有答案了 是否可以在 Matlab 中创建多行匿名函数 没有合适的例子在文档中 http www mathworks com help matlab matlab prog anonymous functions html
  • glm 中矩阵值的顺序不正确?

    我开始使用GLM http glm g truc net通过 OpenGL 3 和 GLSL 进行数学运算的库 我需要正交投影来绘制 2D 图形 所以我编写了这个简单的代码 glm mat4 projection 1 0 projectio
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 对多个属性使用一种设置方法 MATLAB

    我有几个属性基本上使用相同的属性set method classdef MyClass properties A B end methods function mc MyClass a b Constructor mc A a mc B b
  • 3D 透视投影的剪辑矩阵

    我正在尝试创建一个简单的 3D 图形引擎 并找到并使用了我在这里找到的方程 http en wikipedia org wiki 3D projection cite note 0 http en wikipedia org wiki 3D
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 如何在 NumPy 中连接两个一维数组?

    我有两个数组A a1 an and B b1 bn 我想得到新的矩阵 C 等于 a1 b1 a2 b2 an bn 我该如何使用numpy concatenate 这个怎么样 很简单但是fastest解决方案 In 73 a np arra
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构

随机推荐

  • 使用 Youtube v3 API 下载字幕

    在尝试使用 OAuth 2 0 授权下载视频 不归我所有 的字幕时 我收到 403 禁止错误 其中指出 与请求关联的权限不足以下载字幕轨道 该请求可能无法正确处理 已授权 或者视频订单可能未启用第三方为此字幕提供的内容 在进一步的研究中 我
  • Ninja 相当于 Make 的“从该目录向下构建”功能(使用 CMake)?

    使用CMake和Make构建项目时 可以执行make从构建树的子目录 即从包含顶级目录的目录下面的目录 Makefile and make将 据我所知 构建该目录下或该目录下的所有目标 这是因为 CMake 生成了一个Makefile对于每
  • 是否有用于指定属性“显示名称”的 .NET 属性?

    是否有一个属性允许您为类中的属性指定用户友好的名称 例如 假设我有以下课程 public class Position public string EmployeeName get set public ContactInfo Employ
  • 通过 Applescript 在 Xcode 4 中添加文件断点

    我正在尝试使用 AppleScript 将断点添加到当前 XCode 项目中选定的 m 文件 现在我陷入了困境 因为 AppleScript 在尝试添加文件断点时不断返回 缺失值 我当前的 AppleScript 看起来像这样 其中 PRO
  • 在 JavaScript 中构建“类”的现代方法是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何构建一个 类 具有属性和方法 并在其上创建大量实例 The modern方法是使用class https developer mo
  • apache 上的多个 ssl 虚拟主机

    我想在 apache 上使用它们自己的 ssl 证书配置两个虚拟主机 apache 2 2 22 和 openssl 1 0 1 debian 7 6 我找了很多关于SNI的文章 但还是无法正确配置 这是我的配置 端口配置文件 NameVi
  • 如何在 pandas 中进行左外连接排除

    我有两个数据框 A 和 B 我想在 A 中获取它们 但不在 B 中 就像左上角正下方的数据框一样 数据框 A 有列 a b others B 有列 a b others 没有 NaN 值 我尝试了以下方法 1 dfm dfA merge d
  • ISO 8601 中的时间戳 - 最后 6 位数字 yyyy-MM-dd'T'HH:mm:ss。

    我的时间戳看起来像这样 2015 03 21T11 08 14 859831 2015 03 21T11 07 22 956087 我读了一篇关于 ISO 8601 的 Wiki 文章 https en wikipedia org wiki
  • pandas - 计算另一列中每个唯一值的 DataFrame 中值的出现次数

    假设我有一个数据帧 term score 0 this 0 1 that 1 2 the other 3 3 something 2 4 anything 1 5 the other 2 6 that 2 7 this 0 8 someth
  • MySQL按日期分组的累积和

    我知道有一些与此相关的帖子 但我的情况有点不同 我想在这方面获得一些帮助 我需要从数据库中提取一些数据 这些数据是每天交互的累积计数 目前这就是我所拥有的 SELECT e Date AS e date count e ID AS num
  • 如何将 dll 导入到在网络服务器上运行的 ASP.NET Web 应用程序中

    我在 VS 2010 中创建了一个 dll 我将其放入网络服务器上的 app code 文件夹中 然后我通过尝试使用来访问它imports GetWebPageData 如果这意味着什么的话 dll 位于 bin debug 下的 vs 项
  • 如何在Java中的不同类中使用相同的对象

    假设我有 3 个 java 类 A B 和 C 我需要创建一个在 A 和 B 中都使用的 C 类对象 但单独创建该对象的问题是类 c 的构造函数被调用了 2 次 但我希望构造函数只被调用一次 所以我想将A类中创建的对象使用到B类中 因此 创
  • 如何从 Web api 控制器返回文件?

    我正在使用 MVC 5 Web Api 控制器 我想返回一个文件 Route public HttpResponseMessage GetFile var statusCode HttpStatusCode OK FileStream fi
  • jQuery 倒计时有问题吗?函数serverSync:服务器时间

    serverSync serverTime函数从服务器返回值 但我检查了服务器和客户端时间是否相同 当我调用服务器与服务器同步时 它不会显示倒计时 帮我 function var shortly new Date var newTime n
  • SQL更新记录,每次从1开始递增值

    我使用单个插入语句将批量记录添加到表中 我希望为每个新批次分配递增的数字 但每次都从 1 开始 所以 如果我有 Batch Name IncementingValue 1 Joe 1 1 Pete 2 1 Andy 3 2 Sue 1 2
  • Scrapy好像没有做DFO

    我有一个网站 我的爬虫需要遵循一定的顺序 例如 在开始进行 a2 之前 它需要先进行 a1 b1 c1 等操作 a b 和 c 中的每一个都由不同的解析函数处理 并且相应的 url 在 Request 对象中创建并生成 下面粗略地说明了我正
  • 不允许的参数嵌套属性 -rails

    我正在尝试向 2 个表提交表单 但不知何故我收到了此语法错误unexpected n 在这条线上joins sources landslide id and found unpermitted parameter sources在滑坡参数中
  • 无法从 Sequel gem 连接 mysql

    当我尝试从 Sequel 连接到 MySQL 时 我收到这些错误 require rubygems require sequel DB Sequel connect adapter gt mysql user gt root host gt
  • DependencyProperty 未在 NotifyCollectionChanged 事件上通知 UI

    我正在使用一个自定义控件 该控件具有选定的项目依赖属性 我已将其连接到集合更改事件 但未通知 UI 并且 PropertyChanged 事件始终为空 通常我会说这是一个数据上下文问题 但我无法更改控件上的数据上下文 因为不会显示任何数据
  • 如何使用Matlab的bsxfun求解累加和

    我有以下 慢 代码 A is n by m matrix B is n by m by d matrix C is n by m by d matrix R is 1 by d vector A zeros n m for i 1 d A