将 bsxfun 与匿名函数一起使用

2023-12-30

在尝试理解 bsxfun 函数之后,我尝试在脚本中实现它以避免循环。我试图检查数组中的每个单独元素是否包含在一个矩阵中,返回一个与分别包含 1 和 0 的初始数组大小相同的矩阵。我创建的匿名函数是:

myfunction = @(x,y) (sum(any(x == y)));

x 是包含每个说法的“接受值”的矩阵。 y 是输入数组。到目前为止,我已经尝试以这种方式使用 bsxfun 函数:

dummyvar = bsxfun(myfunction,dxcp,X)

我知道 myfunction 等于匿名函数的句柄,并且可以使用 bsxfun 来完成此操作,我只是不明白以下错误的原因:

Non-singleton dimensions of the two input arrays must match each other. 

我正在使用以下测试数据:

dxcp = [1 2 3 6 10 20];
X = [2 5 9 18];

并希望输出为:

dummyvar = [1,0,0,0]

干杯,NZBRU。

编辑:达到 15 次,所以我更新了答案


再次感谢大家,我想我会更新这个,因为我现在了解 Divakar 提供的解决方案是如何工作的。这可能会阻止其他读过我最初的问题并对 bsxfun() 的工作原理感到困惑的人的困惑,我认为写出来也可以帮助我更好地理解它。

注意:以下内容可能不正确,我只是试图通过查看这一案例来了解该函数是如何运行的。

bsxfun 函数的输入是 dxcp 和 X 转置的。使用的函数句柄是@eq,因此对每个元素进行比较。

%%// Given data
dxcp = [1 2 3 6 10 20];
X = [2 5 9 18];

下面的代码:

bsxfun(@eq,dxcp,X')

将第一个输入变量 dxcp 的每个值与 X' 的每一行进行比较。以下矩阵是其输出:

dummyvar =

 0     1     0     0     0     0
 0     0     0     0     0     0
 0     0     0     0     0     0
 0     0     0     0     0     0

通过比较 1 和 2 dxcp = [ 找到第一个元素12 3 6 10 20]; X' =​​ [2;5;9;18];

通过比较 2 和 2 dxcp = [1 找到第一行的下一个23 6 10 20]; X' =​​ [2;5;9;18];

重复此操作,直到 dxcp 的所有值与 X' 的第一行进行比较。按照此逻辑,第二行中的第一个元素使用以下之间的比较进行计算: dxcp = [12 3 6 10 20]; X'=[2;5;9;18];

最终提供的解决方案是any(bsxfun(@eq,dxcp,X'),2),它相当于:any(dummyvar,2)。http://nf.nci.org.au/facilities/software/Matlab/techdoc/ref/any.html http://nf.nci.org.au/facilities/software/Matlab/techdoc/ref/any.html似乎很好地详细解释了any 函数。基本上,说:

A = [1,2;0,0;0,1]

如果运行以下代码:

result = any(A,2)

然后函数any 将检查每一行是否包含一个或多个非零元素,如果是则返回1。这个例子的结果是:

result = [1;0;1];

因为第二个输入参数等于 2。如果将上面的行更改为 result = any(A,1),那么它将检查每一列。

使用这个逻辑,

result = any(A,2)

用于获得最终结果。

1
0
0
0

如果需要的话可以将其转换为等于

[1,0,0,0]

性能 - 运行以下代码后:

tic
dummyvar = ~any(bsxfun(@eq,dxcp,X'),2)' 
toc

结果发现,持续时间为:

Elapsed time is 0.000085 seconds.

下面的替代方案:

tic
arrayfun(@(el) any(el == dxcp),X)
toc

使用 arrayfun() 函数(将函数应用于数组的每个元素)会导致运行时:

Elapsed time is 0.000260 seconds.

^以上运行时间是 5 次运行的平均值,这意味着在本例中 bsxfun() 更快(平均)。

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

将 bsxfun 与匿名函数一起使用 的相关文章

  • Angular JS 中的数组

    我是 Angular JS 新手 我正在将元素推送到数组中 然后想使用 ng repeat 在 html 中显示 scope groupedMedia Adding elements through a for loop scope gro
  • 使用字符串中的变量名称访问变量值,R

    Intro 一个数据集有大量的age year变量 age 1990 age 1991 etc 我有一个字符串值数组length age years 表示这些变量 使得age years 1 回报 age 1990 etc Need 我想搜
  • 重新排列数组键 php [重复]

    这个问题在这里已经有答案了 我有这个数组 Array 15 gt 13 1 16 gt Mark one answer 19 gt You see a car on the hard shoulder of a motorway with
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo
  • C++从文件中读取整数并保存到数组中

    我正在制作一个仅从文本文件读取整数的程序 我想创建一个读取整数并将它们存储在数组中的函数 以便稍后可以使用该数组通过冒泡排序对它们进行排序 这是我到目前为止所得到的 但我得到的输出是一些随机的 803234 数字 void read int
  • JS:连接数组的数组

    我如何在数组的每个子成员和数组本身上使用 Array Join 来分隔父数组的元素 以及子数组的每个元素 let arr 1 2 3 4 5 6 console log arr join Output is 1 2 3 4 5 6 Pseu
  • 如何循环结构体数组并显示所有键值

    我正在循环结构数组并尝试分配和存储所有键值 如果我将内循环包裹起来
  • 将数组字段组合成单个数组字段 mongo

    我正在使用 mongo 版本 3 4 3 我的文档存储在 mongo 中 如下所示 id ObjectId 5ad5ab8aaf2808b739ba6ab2 ResumeId 105839064 ResumeDetails WorkProf
  • 需要从数组中删除字符串[重复]

    这个问题在这里已经有答案了 我在 for 循环中有一个数组 如下所示 var arr abc 5 city 2 area 2 max choice 我只需要这样的数字 var arr 5 2 2 有人可以在这里帮忙吗 另一种方法是使用转换后
  • 显示和随机化 php 数组

    我有一个显示结果的数组 如下所示 Array 0 gt 71 1 gt 56 2 gt 64 3 gt 82 4 gt 90 5 gt 80 6 gt 65 7 gt 62 8 gt 14 9 gt 3 我的代码是 while row my
  • 使用静态指针的动态内存分配

    有人可以向我解释一下为什么下面的代码会这样工作吗 这里我已经初始化了outd作为文件中的静态指针code2 c 然后我动态地为其分配内存malloc 从单独文件中的主函数中一次又一次地调用它code1 c 它看起来整个数组以静态方式运行 因
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 使用正则表达式搜索 Ruby 数组

    你好 我有一个小的 ruby 函数 它可以分割出一个 Ruby 数组 如下所示 def rearrange arr from to sidx arr index from eidx arr index to arr sidx arr sid
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • Deploytool for MATLAB R2013b 不起作用,发生了什么变化?

    多年来我一直在使用集成deploytool为我的同事创建易于分发的 exe 文件 我几天前安装了R2013b 但无法使用deploytool不再了 尝试打包时的日志文件给出了以下内容 ant
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord

随机推荐

  • 使用 Hashids 库对 Laravel eloquent 集合上的 id 进行哈希处理

    我从数据库中获取一组任务作为雄辩的集合 然后将集合发送到我的视图 在那里我执行foreach 这里没有问题 除此之外 我需要参考任务id在我看来 URL 操作等 但我显然不希望在源代码中出现这个 所以我正在使用这个图书馆 https git
  • 如何将值从弹出视图控制器传递到上一个视图控制器?

    所以在我的 1stViewController 中我有这样的代码 IBAction func colorDropdown sender Any self popUpColorPicker func popUpColorPicker let
  • Java:静态最终字段按什么顺序初始化?

    好吧 假设我有一堂课 如下所示 public class SignupServlet extends HttpServlet private static final Logger SERVLET LOGGER COMPANYLog ope
  • Vue.js 组件 prop 没有 2 路绑定?

    I found 这个问题是类似的 https stackoverflow com questions 44790842 vuejs right way to edit prop without changing parent data 但它
  • 为什么静态类在 Java 中是非法的?

    我正在开发一个 Android 应用程序 但遇到了一些困难 我不断收到错误 Illegal modifier for the class FavsPopupFragment only public abstract final are pe
  • 获取生成器的子集

    我有一个生成器函数 想从中获取前十项 我的第一次尝试是 my generator 10 正如错误告诉我的那样 这不起作用 因为生成器不可订阅 现在我已经解决了这个问题 list my generator 10 这是有效的 因为它将生成器转换
  • AWS ALB + Django + Gunicorn +- Nginx?

    我正在 AWS 中构建一个环境来托管 django 应用程序 我试图弄清楚是否应该使用 nginx 作为构建的一部分 我在下面列出了一些不同的环境 以供示例 比较之用 所有环境都使用 AWS ALB ENV 1 ALB gt dockerc
  • nptl SIGCONT 和线程调度

    我正在尝试移植依赖于 SIGCONT 的代码来停止应用程序的某些线程 对于当前的 linux nptl 实现 似乎不能依赖 2 6 x 内核中的实现 我正在尝试设计一种方法来停止其他线程 目前我只能考虑互斥体和条件变量 任何提示表示赞赏 如
  • PHP 中JavaScript 的decodeURIComponent 的等价物是什么?

    我有一个包含 unicode 字符的字符串 我正在通过 HTTP 传输该字符串 该字符串是用 Javascript 编码的encodeURIcomponent php 中是否有与 Javascript 等效的函数decodeURICompo
  • Google Play 说我使用 Android Studio Build->Generate Signed APK 构建的 APK 是可调试的

    我收到消息 您上传了可调试的 APK 出于安全原因 您需要先禁用调试 然后才能在 Google Play 中发布 了解有关可调试 APK 的更多信息 我使用 Android Studio 生成 APK 构建 gt 生成签名 APK 我创建了
  • Tmux:失去焦点时自动隐藏面板

    我最近开始使用 tmux 进行 Vim 编辑 在 PyCharm 中 我曾经在底部有一个终端 我可以通过几次按键来切换屏幕 我希望 tmux 具有相同的功能 在 Vim 中全屏编辑代码 然后当我需要运行命令时 直接转到屏幕底部的终端窗格 然
  • 我的服务器可以同时运行多少个 php 脚本?

    我有一个最终用户可以访问的脚本 该脚本可以进行以下调用 exec php orderWatcher php insertedId gt dev null 在 orderWatcher php 中我做了一些需要很长时间的操作 if check
  • 如何通过命令行向sql脚本传递参数

    有一个要求 我试图自动化项目中的一个流程 其中需要运行 sql 来进行日常报告 sql 如下所示 这是最简单的形式 但我的 sql 有 400 行 下面只是获取结果的示例 test sql select from table where c
  • .query 字符串中的美元符号 ('$') 是什么意思?

    什么是 该声明中的符号含义 SQL Query gt Update Data client query UPDATE items SET text 1 complete 2 WHERE id 3 data text data complet
  • 按索引选择多索引数据框中的行而不丢失任何级别

    我想选择一个名为 Mid 的行 而不丢失它的索引 Site 以下代码显示了数据框 m commodity price max maxperstep Site Commodity Type Mid Biomass Stock 6 0 inf
  • spring数据休息更新产生交叉连接sql错误

    我想使用 Spring Data Rest 来更新某些用户的行 但在运行时此查询在查询中添加了奇怪的 交叉联接 Spring数据休息方法 Modifying Transactional Query Update Notification n
  • 如何使用python的telnetlib从设备获取固定时间段的数据?

    我正在通过 telnet 连接到硬件设备 该设备的 I O 非常简单 因此 我向它提交一个命令 然后设备每秒一次一次输出一行数据 每行仅包含一个数字 所以我的问题是这样的 如果我使用python的telnetlib连接到这个设备 我如何获取
  • 防止双重投票

    我正在创建一个 Web 应用程序 用户将通过单击 赞成 或 反对 来为某些候选人投票 并且这些用户在该网站上没有任何帐户 最好使用什么技术 是否有必要使用验证码来进一步防范垃圾邮件 预计投票数将达到数百万 主题也不是很关键 只要我得到 95
  • 基本的 javascript 流程 - 在各种浏览器中

    我试图通过一个非常简单的 JavaScript 示例来学习 JavaScript 中的流程 但是三种浏览器 Chrome IE 和 Firefox 这三种浏览器都显示不同的流程模式和不同的最终结果 我知道会出现跨浏览器问题 但这个问题非常简
  • 将 bsxfun 与匿名函数一起使用

    在尝试理解 bsxfun 函数之后 我尝试在脚本中实现它以避免循环 我试图检查数组中的每个单独元素是否包含在一个矩阵中 返回一个与分别包含 1 和 0 的初始数组大小相同的矩阵 我创建的匿名函数是 myfunction x y sum an