如何在Mathnet,vb.net中从矩阵或向量中找到实体索引?

问题描述

假设我有一个矩阵A = [1 2 3; 4 5 6] 现在,我要检查是否存在5。答案应该是行和列,即 行= 1 列= 1 我试图找到但没有发现有用。

预先感谢

解决方法

对于多维数组,我们的选择不多。 一种方法是循环数组以获取元素索引,或尝试下面的代码(仅搜索的数字匹配)进行循环。

ReadOnly matrix(,) As Integer = New Integer(1,2) {{1,2,5},{4,5,6}}

Structure GridData
    Dim Row As Integer
    Dim Col As Integer
End Structure


Function FindIndexesOfNumber(searchedNr As Integer) As List(Of GridData)


    Dim startIndex As Integer = 0
    Dim enumerator As List(Of GridData) = (From elements In matrix).ToList.Where(Function(x) x.Equals(searchedNr)).Select(Function(x)
                                                                                                                              'fake select,it's only for the loop which find numbers  
                                                                                                                              startIndex = Array.IndexOf(matrix.OfType(Of Integer)().ToArray(),searchedNr,startIndex + 1)
                                                                                                                              Dim matrixBound As Integer = matrix.GetUpperBound(1) + 1
                                                                                                                              Return New GridData With {
                                                                                                                               .Col = startIndex Mod matrixBound,.Row = (startIndex \ matrixBound)
                                                                                                                               }
                                                                                                                          End Function).ToList





    For Each c In enumerator
        Console.WriteLine(String.Format("Col: {0} Row: {1}",c.Col.ToString,c.Row.ToString))
    Next

    Return enumerator

End Function

用法:

Dim indexes As List(Of GridData) = FindIndexesOfNumber(5)
,

您可以尝试

Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
    Dim a As Integer(,) = New Integer(,) {{0,1,2},{3,4,{6,7,8},{9,10,11},{12,13,14}}

    Dim rw As Integer,cl As Integer

    Dim xy As Integer = 13

    If getXY(a,xy,rw,cl) = True Then
        MessageBox.Show("Row: " & rw & " # Col: " & cl)
    Else
        MessageBox.Show("Not found")
    End If
End Sub

Function getXY(arr As Array,findwhat As Object,ByRef row As Integer,ByRef col As Integer) As Boolean
    Dim d = (From x In arr).ToList.IndexOf(findwhat)
    If d = -1 Then Return False
    row = Math.Ceiling((d + 1) / arr.GetLength(1)) - 1
    col = d Mod arr.GetLength(1)
    Return True
End Function

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...