2014-01-07 3 views
0

У меня есть 4 кластера (0, 1, 2, 3) и ряд данных из определенного класса (класс 0, класс 1, класс 2). Данные выглядят ниже.Дайте имя класса кластеру

(cluster, class) number of data 

(0,0)      1 
(0,1)     2 
(0,2)     2 
(1,0)     0 
(1,1)     0 
(1,2)     0 
(2,0)     0 
(2,1)     0 
(2,2)     1 
(3,0)     4 
(3,1)     3 
(3,2)     0 

Я бы хотел указать имя класса для каждого кластера.

Идея заключается в том, что имя определенного кластера будет именем класса, в котором число данных с определенным классом чаще всего появляется.

Я хотел бы назвать имя кластера, поэтому имя будет выглядеть ниже.

Кто-нибудь может помочь решить эту проблему в VB.NET? Спасибо

cluster class 
0   1 
1 
2   2 
3   0 

ответ

1

Что вы можете сделать, это создать «пользовательский объект массива» как это:

Public Class DataArray(Of T) 

    Public Sub New(rowCount As Integer, columnCount As Integer) 
     If (rowCount < 0) Then 
      Throw New ArgumentOutOfRangeException("rowCount") 
     ElseIf (columnCount < 0) Then 
      Throw New ArgumentOutOfRangeException("columnCount") 
     End If 
     Me.array = New T((rowCount - 1), (columnCount - 1)) {} 
     Me.names = New String(rowCount - 1) {} 
     Me.rowCount = rowCount 
     Me.columnCount = columnCount 
    End Sub 

    Default Public Property Item(rowIndex As Integer, columnIndex As Integer) As T 
     Get 
      Return Me.array(rowIndex, columnIndex) 
     End Get 
     Set(value As T) 
      Me.array(rowIndex, columnIndex) = value 
     End Set 
    End Property 

    Public Property Cluster(rowIndex As Integer) As String 
     Get 
      Dim s As String = Me.names(rowIndex) 
      Return If((s Is Nothing), String.Empty, s) 
     End Get 
     Set(value As String) 
      Me.names(rowIndex) = If((value Is Nothing), String.Empty, value) 
     End Set 
    End Property 

    Public Sub [Set](rowIndex As Integer, values As T(), name As String) 
     For i As Integer = 0 To (values.Length - 1) 
      Me.array(rowIndex, i) = values(i) 
     Next 
     Me.names(rowIndex) = name 
    End Sub 

    Private ReadOnly array As T(,) 
    Private ReadOnly names As String() 
    Private ReadOnly rowCount As Integer 
    Private ReadOnly columnCount As Integer 

End Class 

Так что теперь, если я создаю массив из 4 строк (0,1,2,3) и трех столбцов (0,1,2) данных Тип Integer:

Dim data As New DataArray(Of Integer)(4, 3) 

и заполнить некоторые данные:

data.[Set](0, {0, 1, 2}, "Cluster 0") 
data.[Set](1, {0, 0, 0}, "Cluster 1") 
data.[Set](2, {0, 0, 1}, "Cluster 2") 
data.[Set](3, {4, 3, 0}, "Cluster 3") 

можно также установить значения, как вы делали:

data(0, 0) = 1 
data(0, 1) = 2 
data(0, 2) = 2 
data(1, 0) = 0 
data(1, 1) = 0 
data(1, 2) = 0 
data(2, 0) = 0 
data(2, 1) = 0 
data(2, 2) = 1 
data(3, 0) = 4 
data(3, 1) = 3 
data(3, 2) = 0 

И имя каждого кластера:

data.Cluster(0) = "Cluster 0" 
data.Cluster(1) = "Cluster 1" 
data.Cluster(2) = "Cluster 2" 
data.Cluster(3) = "Cluster 3" 
Смежные вопросы