[英][Matlab][Simulink] How to find a specific value in a 2d array?
我遇到过必须使用Simulink的情况。
我有一个包含数据的csv文件(1000行x 6列)。 我需要搜索我的csv文件的第6列,找到与我正在寻找的最接近的匹配,然后返回列1 2 3 4。
为简单起见,我们可以使用较小版本的问题。
Csv文件示例
0 0 0 0 0 20
0 10 15 2 4 30
1 50 2 54 2 40
我搜索21.我发现第1行第6列最接近21.然后返回0 0 0 0(前四列。
我搜索34,发现第3行第6列最接近34.然后返回1 50 2 54。
希望这能解释我的需要。
本来我写了使用find(...)在MATLAB工作脚本和它的工作,但是这必须使用Simulink来完成。
我注意到有2d循环表块可以工作,但是,看起来我需要事先了解我的索引。
如果有人能指出我可以使用哪些块的正确方向,并且我可以谷歌周围的如何使用它们,将非常感激。
正如我在评论中所说,最好的办法是简单地使用Matlab函数或解释的Matlab函数块,以便将现有函数合并到Simulink模型中(如果不需要,则无需重新发明轮子) )。
如果你的工作条件必须是“所有Simulink”(即没有用户定义的块),那么可能有用的几个块是Selector , Find , Min和Compare To Zero 。
我可能采取的一种方法是使用选择器来隔离第6列。 找到列中每个值与您尝试匹配的值之间的“错误”(即获取差异的绝对值)。 使用Min
块查找最小错误。 从误差向量中减去最小误差,以便最接近匹配的索引现在具有值0.使用“ Compare To Zero
和“ Find
您应该能够确定最接近匹配的索引。 完成后,您可以使用它来驱动另一个Selector
块,以便根据需要选择元素。
我能想到的其他一些块可能真的很有帮助( Find Local Maxima是我想你可以融入解决方案的想法); 但是,它们需要额外的工具箱。
您可以使用Minimum块来实现此目的。 将其模式设置为索引,以便输出具有最小错误的项目的索引。
将此索引传递到变量选择器块,通过In1获取原始行/列,并在Idx上获取最小值的索引 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.