如何在Matlab中的多维数组中应用corr2函数?

2024-02-09

假设我有两个矩阵 A 和 B

A = rand(4,5,3);
B = rand(4,5,6)

我想应用函数“corr2”来计算相关系数。

corr2(A(:,:,1),B(:,:,1))
corr2(A(:,:,1),B(:,:,2))
corr2(A(:,:,1),B(:,:,3))
...
corr2(A(:,:,1),B(:,:,6))
...
corr2(A(:,:,2),B(:,:,1))
corr2(A(:,:,2),B(:,:,2))
...
corr2(A(:,:,3),B(:,:,6))

如何避免使用循环来创建此类矢量化?


侵入 m 文件corr2创建用于处理 3D 阵列的自定义矢量化版本。这里提出了两种方法bsxfun(当然!)

方法#1

szA = size(A);
szB = size(B);

a1 = bsxfun(@minus,A,mean(mean(A)));
b1 = bsxfun(@minus,B,mean(mean(B)));

sa1 = sum(sum(a1.*a1));
sb1 = sum(sum(b1.*b1));

v1 = reshape(b1,[],szB(3)).'*reshape(a1,[],szA(3));
v2 = sqrt(sb1(:)*sa1(:).');

corr3_out = v1./v2; %// desired output

corr3_out stores corr2所有 3D 切片之间的结果A and B.

因此,对于A = rand(4,5,3), B = rand(4,5,6), 我们会有corr3_out as a 6x3 array.

方法#2

稍微不同的方法可以节省很少的调用sum and mean通过使用reshape反而 -

szA = size(A);
szB = size(B);
dim12 = szA(1)*szA(2);

a1 = bsxfun(@minus,A,mean(reshape(A,dim12,1,[])));
b1 = bsxfun(@minus,B,mean(reshape(B,dim12,1,[])));

v1 = reshape(b1,[],szB(3)).'*reshape(a1,[],szA(3));
v2 = sqrt(sum(reshape(b1.*b1,dim12,[])).'*sum(reshape(a1.*a1,dim12,[])));

corr3_out = v1./v2; %// desired output

标杆管理

基准代码 -

%// Create random input arrays
N = 55; %// datasize scaling factor
A = rand(4*N,5*N,3*N);
B = rand(4*N,5*N,6*N);

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

%// Run vectorized and loopy approach codes on the input arrays

%// 1. Vectorized approach
%//... solution code (Approach #2) posted earlier
%// clear variables used

%// 2. Loopy approach
tic
s_A=size(A,3);
s_B=size(B,3);
out1 = zeros(s_B,s_A);
for ii=1:s_A
    for jj=1:s_B
        out1(jj,ii)=corr2(A(:,:,ii),B(:,:,jj));
    end
end
toc

结果 -

-------------------------- With BSXFUN vectorized solution 
Elapsed time is 1.231230 seconds.
-------------------------- With loopy approach
Elapsed time is 139.934719 seconds.

MATLAB-JIT 爱好者在这里表现出一些爱! :)

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

如何在Matlab中的多维数组中应用corr2函数? 的相关文章

  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • 循环遍历多维数组

    我有一个与此类似的 JSON 文件 Pages Name Home Page index php admin Name Admin Page admin index php Template admin MobileTemplate adm
  • 单元格的 Fieldnames 函数的等效项

    正如标题所说 只是想知道是否有一个函数可以用作字段名 http www mathworks co uk help matlab ref fieldnames html 但适用于单元格 所以如果我有类似的东西 a imread redsqua
  • 无循环按键对多维数组求和

    我有这个 Array 0 gt Array f count gt 1 uid gt 105 1 gt Array f count gt 0 uid gt 106 2 gt Array f count gt 2 uid gt 107 3 gt
  • 基于非零的多维数组

    我正在使用以下命令从电子表格中提取单元格Interopt ExcelAPI 当我打电话时 object rangeValues object range get Value XlRangeValueDataType xlRangeValue
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 使用 R2010b 中的符号工具箱来求解和/或 linsolve

    我前几天问了一个问题here https stackoverflow com questions 20317038 matlab linear congruence solver that supports a non prime modu
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • MATLAB 可执行文件太慢

    我使用以下命令将 MATLAB 程序转换为基于控制台的应用程序deploytool在 MATLAB 中 MATLAB m文件执行大约需要 2 秒 但在我将其转换为可执行文件并调用 exe 执行需要45秒 太长了 我想将 MATLAB 程序与
  • getappdata 在 MATLAB 中返回空矩阵

    我有一段代码 我在其中使用setappdata然后我使用以下方式调用数据getappdata即使它不为空 它也会返回一个空矩阵 我的一段简化代码如下 function edit1 Callback hObject eventdata han
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 如何在 VB.NET 中声明和初始化多维数组?

    我想做这个 Dim Numbers As Integer 1 2 3 4 5 6 7 IDE 的下划线4 5 6 7并说Array initializer has 3 too many elements 我究竟做错了什么 以下应该有效 Di
  • TensorFlow:带有轴选项的 bincount

    在 TensorFlow 中 我可以使用 tf bincount 获取数组中每个元素的计数 x tf placeholder tf int32 None freq tf bincount x tf Session run freq feed
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床

随机推荐

  • 使用 Greasemonkey 删除表

    我正在尝试使用油脂猴子用我自己的桌子替换桌子 拥有该表的页面有 2 个具有相同类且没有 ID 的表 我只需要替换第二个表 用我自己的表 并且对第一个表不执行任何操作 没有什么可以真正使第二个表与第一个表不同 所以我唯一能想到的就是尝试在第二
  • 为什么RNN总是输出1

    我使用循环神经网络 RNN 进行预测 但由于某些奇怪的原因 它总是输出 1 这里我用一个玩具示例对此进行解释 Example考虑一个矩阵M维度 360 5 和一个向量Y其中包含 rowsumM 现在 使用 RNN 我想预测Y from M
  • 如何使用命令行将 TFS 工作项链接到另一个工作项

    如何使用命令提示符将现有 TFS 工作项链接到另一个工作项 TFS 中有此命令行选项吗 我知道我可以使用 tfpt exe 创建工作项或修改它 但我找不到将工作项链接到另一个工作项的选项 假设您将使用 相关 链接类型 这应该链接您的工作项目
  • 查找连续的两行

    我正在尝试编写一个查询 该查询将从 Bill 表中拉回 Estimated 标志为 true 的最新两行 问题是这些需要是连续的账单 简而言之 如果在过去两个账单周期中估算了账单 我需要在另一个表中输入一行 如果可能的话 我想在没有游标的情
  • PHP/CSS 在字符串中查找单词,更改其颜色

    PHP CSS 在字符串中查找单词 更改其显示颜色 遇到问题 找不到解决方案 有什么建议吗 谢谢 pre span style color red span pre
  • 将变量类型的 json 转换为字符串

    我正在从 API 响应中读取 json 但遇到了一个问题 因为 json 值中有多种数据类型 字符串 null bool 此外 某些键的值可以是字符串或 null 这使得将数据读入类型变得更加困难 我想将所有内容都转换为字符串以便于处理 我
  • .net 应用程序无法连接到 DB2 数据库

    错误 08001 IBM SQL30081N 检测到通信错误 使用的通信协议 TCP IP 使用的通信 API SOCKETS 检测到错误的位置 10 66 180 30 通信功能检测到错误 连接 协议特定错误代码 10061 SQLSTA
  • 忽略 Cordova iOS 启动画面配置

    我刚刚将我的 iOS Cordova 初始屏幕重新配置为启动 Storyboard 以支持 iPhone X 这可行 但现在我在启动 Storyboard 和应用程序的第一个屏幕之间出现白色闪光 我认为这是因为在视口完全加载之前闪屏被隐藏
  • 如何在 ASP.NET 中使用 Profile?

    我尝试学习 asp net 配置文件管理 但我在下面添加了 xml 名字 姓氏等 但我不能写个人资料 如果我尝试编写 Profile 属性 卓尔我的编辑简介 错误 1 当前上下文中不存在名称 配置文件 C Documents and Set
  • 根据 GUID 获取站点 URL? (SharePoint)

    有没有代码示例向我展示如何在我知道 guid 的情况下获取站点的 url 目前 我有此代码来获取网站集中的所有网站 private void getSites SPSite oSiteCollection SPContext Current
  • 如何将“for”循环的结果保存到单个变量中? [复制]

    这个问题在这里已经有答案了 我有一个for loop for x in range 1 13 print This was the average temperature in month number str x in Boston 20
  • jQuery Chosen div 落后于 Twitter Bootstrap 手风琴

    我在 Twitter Bootstrap 手风琴中使用 jQuery Chosen 插件 我遇到的问题是所选插件的下拉菜单出现在div的手风琴菜单 我尝试设置z index到更高的值 但这并没有达到目的 我举了一个我的问题的例子 http
  • VBScript WScript.Shell Run() - 系统找不到指定的文件

    我正在尝试编写一个使用 WScript Shell 的 VBScript vbs 脚本Run 方法 但 Run 似乎找不到我传入的文件 我已将脚本简化为以下代码 该代码将重现结果 可以将其复制到文本编辑器 另存为test vbs然后跑了 T
  • scikit-learn中predict与predict_proba的区别

    假设我创建了一个模型 并且我的目标变量是0 1 or 2 看来如果我使用predict 答案是 0 1 或 2 但是如果我使用predict proba 我得到一行 每行 3 列 如下所示 例如 model Classifier It co
  • 动态 JSP 编译中导入失败

    我们有一个大型 Web 应用程序安装 使用 Apache Tomcat Jasper 和 jboss 在开发环境中 JSP 是动态编译的 不幸的是 有一个包特别是即时编译似乎无法导入 对于某些类 使用完全限定的引用而不是导入是可行的 但不适
  • Masonry JS 重叠项目

    我这里有一个非常奇怪的问题 推荐链接已删除 第一行产品项目与第二行中的项目重叠 砌体项目位于主页下方页脚上方 如您所见 Chrome 看起来有所不同 在火狐浏览器中 看起来不错 这是它在我的 chrome 中的样子 http clip2ne
  • Python属性错误:类型对象'_socketobject'没有属性'gethostbyname'

    我正在尝试在我的程序中执行此操作 dest socket gethostbyname host 我已经包括了这一行 from socket import 在文件的开头 我收到此错误 属性错误 类型对象 socketobject 没有属性 g
  • 在控制台中更改 Google Cloud Compute Engine 实例的内部静态 IP 地址

    我有一个现有的云计算引擎实例 该实例被错误地分配了错误的静态内部 IP 我无法找到使用控制台或其他方式将内部 IP 地址修改为正确值的方法 我尝试保留一个新的静态内部 IP 这很容易 但无法将其分配给现有资源 我说的是 Google Con
  • numpy.digitize 返回的值超出范围?

    我使用以下代码将数组数字化为 16 个容器 numpy digitize array bins numpy histogram array bins 16 1 我预计输出在 1 16 范围内 因为有 16 个 bin 然而 返回数组中的一个
  • 如何在Matlab中的多维数组中应用corr2函数?

    假设我有两个矩阵 A 和 B A rand 4 5 3 B rand 4 5 6 我想应用函数 corr2 来计算相关系数 corr2 A 1 B 1 corr2 A 1 B 2 corr2 A 1 B 3 corr2 A 1 B 6 co