簡體   English   中英

[Matlab] [Simulink]如何在二維數組中找到特定值?

[英][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”(即沒有用戶定義的塊),那么可能有用的幾個塊是SelectorFindMinCompare To Zero

我可能采取的一種方法是使用選擇器來隔離第6列。 找到列中每個值與您嘗試匹配的值之間的“錯誤”(即獲取差異的絕對值)。 使用Min塊查找最小錯誤。 從誤差向量中減去最小誤差,以便最接近匹配的索引現在具有值0.使用“ Compare To Zero和“ Find您應該能夠確定最接近匹配的索引。 完成后,您可以使用它來驅動另一個Selector塊,以便根據需要選擇元素。

我能想到的其他一些塊可能真的很有幫助( Find Local Maxima是我想你可以融入解決方案的想法); 但是,它們需要額外的工具箱。

您可以使用Minimum塊來實現此目的。 將其模式設置為索引,以便輸出具有最小錯誤的項目的索引。

將此索引傳遞到變量選擇器塊,通過In1獲取原始行/列,並在Idx上獲取最小值的索引

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM