带 if 语句的可向量化 FIND 函数 MATLAB

2024-05-02

我有一个矩阵u,我想遍历所有行和所有列并执行以下操作。如果元素非零,我返回行索引的值。如果元素为零,则查找该元素之后的下一个非零元素的行索引。我可以使用两个带有 find 函数的 for 循环轻松完成此操作。但我需要多次执行此操作(不是因为矩阵的大小,而是因为这被调用了很多次)。我怎样才能做得更快?

这是for循环代码:

     for w=scenario_size:-1:1
            for t=1:time_size
                l = u(t,w) ;
                if l~=0
                    tprime = t ;
                else
                    tprime = t+ find(u(t:end,w),1,'first') -1 ;
                end
                i(t,w)       = tprime ;
                boo(t,w)     = number(tprime,w)/u(tprime,w) ;
            end
end

例如,如果一列是[0,0,5,1,0,3], the i is [3,3,3,4,6,6]。任意列的最后一个元素u始终非零(我通过在末尾人为地添加一行来强制这一点)。

Then boo是对应的条目tprime对于某些矩阵number除以相应的u(通过构造,其不为零)。


您可以使用以下方法解决此问题find https://www.mathworks.com/help/matlab/ref/find.html, cummin https://www.mathworks.com/help/matlab/ref/cummin.html, 还有一些逻辑索引 https://www.mathworks.com/help/matlab/math/array-indexing.html#MatrixIndexingExample-3。从这个例子开始:

>> u = randi([0 1], 10);
>> u(end, :) = 1

u =

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

以下将做你想做的事:

i = nan(size(u));  % Start with all nan values
[r, ~] = find(u);  % Get row indices of non-zero values
i(u ~= 0) = r;     % Place row indices in locations of non-zero values
i = cummin(i, 1, 'reverse');  % Column-wise cumulative minimum, starting from bottom

结果:

i =

     2     4     2     2     1     3     1     3     1     1
     2     4     2     2     2     3     7     3     3     2
     4     4     4     7     4     3     7     3     3     7
     4     4     4     7     4     4     7     7     5     7
     6     6     5     7    10     8     7     7     5     7
     6     6     6     7    10     8     7     7     8     7
     8     7    10     7    10     8     7     7     8     7
     8     8    10     8    10     8     8     8     8     8
     9    10    10     9    10    10     9     9     9     9
    10    10    10    10    10    10    10    10    10    10

然后你可以计算你的矩阵boo通过转换i to a 线性指数 https://www.mathworks.com/help/matlab/math/array-indexing.html#MatrixIndexingExample-2:

index = i+time_size.*repmat(0:(scenario_size-1), time_size, 1);  % Create linear index
boo = number(index)./u(index);

或者,您可以计算i作为从一开始的线性索引:

i = nan(size(u));  % Start with all nan values
index = find(u);   % Get linear indices of non-zero values
i(index) = index;  % Place linear indices in locations of non-zero values
i = cummin(i, 1, 'reverse');  % Column-wise cumulative minimum, starting from bottom
boo = number(i)./u(i);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带 if 语句的可向量化 FIND 函数 MATLAB 的相关文章

  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 循环更改多个数据帧

    例如 我有这三个数据集 就我而言 它们更多并且有很多变量 data frame1 lt data frame a c 1 5 3 3 2 b c 3 6 1 5 5 c c 4 4 1 9 2 data frame2 lt data fra
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 在多个 for 循环中使用相同的变量名是不好的做法吗?

    我只是使用 JSHint 来检查一些 JavaScript 代码 在代码中 我有两个 for 循环 它们的用法如下 for var i 0 i lt somevalue i 因此两个 for 循环都使用 var i 进行迭代 现在 JSHi
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 为什么 MATLAB 在打印大量 (.png) 图形时速度会变慢?

    我正在将大量数字打印为 png 文件 每个图都是数据矩阵中的一列图 我获取 png 文件并将它们串在一起形成动画 我的问题是 前几百张图像打印得很快 但创建每个新图形的时间却迅速增加 从前几百个 png 文件的约 0 2 秒到第 800 个
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 从多层嵌套数组 JavaScript 中获取所有键值

    我有一个这样的对象 var data id 36e1e015d703120058c92cf65e6103eb title Alex McGibbon id 60beb5e7d7600200e5982cf65e6103ad title Ale
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • MATLAB 可执行文件太慢

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

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使

随机推荐

  • 使用 DrawImage 方法黑屏

    我必须使用绘制位图图像绘图上下文 DrawImage http msdn microsoft com en us library ms606804 28v vs 90 29 aspx method 使用下面的代码一切正常 BitmapIma
  • dplyr 中的 if_all 和 if_any 函数未运行

    我正在尝试使用以下方法复制这些示例if all and if any功能但不工作 Erro Problem with filter input 1 x n o foi poss vel encontrar a fun o if all i
  • 如何在收到一定数量的数据后调用 Web 服务并将其加载到表视图中

    我正在开发一个项目 在该项目中 首先调用 Web 服务 我们会获取大约 20 个数据 我们将这些数据加载到表视图中 一旦我们开始向上滚动查看视图 当它达到 20 个数时 我们需要为接下来的 20 个数调用服务 就像 Facebook 所做的
  • grails 中的 log4j:在附加程序配置中使用变量时打印错误

    我在 grails 2 3 4 中使用 slf4j DailyRollingFileAppender 当我尝试使用变量作为 文件 参数的一部分时 grails 总是在应用程序启动时打印一些错误日志 但是我的应用程序的日志消息可以按预期打印到
  • java.lang.ClassCastException:android.os.Parcelable[] 无法转换为 Photo[]

    It s happening for 0 08 of our users One of the crashes happening on Samsung Galaxy S10 running Android 11 不过 在运行 Androi
  • 使用带有 Razor Pages 的复选框列表作为数据库的输入

    我希望表单中的输入之一来自用户选择的复选框列表 我已经研究了几个小时了 但我仍然不明白我需要为此做什么 为什么 MVC 在这个主题上有如此多的帮助 而 Razor 却几乎没有 cshtml
  • Gson:解析通用集合

    是否可以创建一个从 jsson 解析通用集合的方法 我上面的方法不起作用 因为在运行时 gson 在此处返回 LinkedHasmaps 的 ArrayList 但是在编译时没有错误 private
  • MySQL 主键是否已经处于某种默认顺序

    我刚刚在一个我刚刚开始使用的系统中偶然发现了几行我并不真正理解的代码 该系统有一个大表 可以保存大量具有唯一 ID 的实体 并在不再需要时将其删除 但绝不会重用它们 所以桌子看起来像这样 id info1 info2 info3 1 foo
  • 带破折号的参考命令名称

    我最近发现 Powershell 函数只是命名的脚本块 例如 function HelloWorld Write Output Hello world hw function HelloWorld hw 将执行HelloWorld方法 但是
  • Hibernate DDL表动态创建

    我有一个 spring boot 项目 我正在使用 hibernate 将我的实体映射到数据库 但是现在我有一个新的要求 我需要能够在数据库中动态创建表 而无需任何映射 到目前为止 有谁知道一些框架来帮助我处理这个问题 我想执行 SQL 或
  • 如何将触发器添加到谷歌云构建中的队列?

    构建触发器应等到同一存储库的前一个触发器完成执行 如果我两次推送到存储库 触发器会同时执行两次 我不希望这种事发生 如何让云触发器等待上一个触发器作业 提前致谢 使用像 Jenkins 这样的构建服务器 它具有 cloudbuild 所缺少
  • 如何使用 wso2 BPEL 创建和部署带有人工任务的 BPEL 流程

    我还没有找到任何有关创建的文档BPEL使用人工任务进行流程WSO2 BPEL 只有一个例子叫做Claims Approval现有的已准备好部署流程 创建该示例流程的文档也不存在 请帮帮我 发现存在类似的问题 但不幸的是该问题没有答案 任何帮
  • 使用单个 shell 脚本运行 React 和 Flask

    我构建了一个使用 ReactJS 作为前端和 Flask 作为中间件的应用程序 我可以使用以下命令序列来执行它 npm start cd Equation Solver python m flask run 执行第一个命令后 我必须打开另一
  • Android 日历视图字体大小

    我正在使用 Xamarin 构建 Android 应用程序 这是我的第一个应用程序 我有一个CalendarView我需要更改当天的字体大小和样式 我尝试了下面的代码 字体颜色改变了 但尺寸太小了 最低 API 级别为 11 目标 API
  • 如何在使用图像创建视频时添加图像变化动画

    我有一组图像 我想通过按顺序播放这些图像来创建视频 我想在图像发生变化时添加不同类型的动画 建议我一些方法或任何解决方案来通过 Cocoa 框架在 Objective C 中实现此功能 这是制作图像视频的工作代码 但请建议我们在制作视频时如
  • Visual Studio 中的监视窗口

    有没有一种方法可以指定在监视窗口中查看对象的哪些成员 而无需扩展具有所有属性的树 例如 p new Point 10 10 将显示在 Watch 的 Value 列中 X 10 Y 10 对于我自己的课程 它总是显示 MyNamespace
  • 将文件从远程服务器复制到谷歌云存储桶

    如何将文件从远程服务器复制到 Google 存储桶 例如 gcloud compute scp username server path to file gs my bucket 这个方法会报错 All sources must be lo
  • 使用 Swift PDF417 解码并生成相同的条形码

    我有以下 PDF417 条形码示例 可以使用在线工具进行解码 例如zxing https zxing org w decode jspx 结果如下 5wwwwwxwww0app5p3pewi0edpeapifxe0ixiwwdfxxi0xf
  • 从 UIImageView 获取上下文

    我可以获取上下文吗 CGContextRef 来自存在UIImageView 详细信息 我有一个指向 xib 文件的控制器链接 在IB中我添加了一个UIImageView并参考它 IBOutlet UIImageView imageView
  • 带 if 语句的可向量化 FIND 函数 MATLAB

    我有一个矩阵u 我想遍历所有行和所有列并执行以下操作 如果元素非零 我返回行索引的值 如果元素为零 则查找该元素之后的下一个非零元素的行索引 我可以使用两个带有 find 函数的 for 循环轻松完成此操作 但我需要多次执行此操作 不是因为