65.9K
CodeProject 正在变化。 阅读更多。
Home

此类包含一些不错的统计函数

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (3投票s)

2007 年 3 月 20 日

CPOL
viewsIcon

37506

downloadIcon

569

它包含一些统计函数,例如均值、方差等。

引言

附件中的类可以帮助你在项目中运用统计函数。

它包含以下函数:

1-最大值

2-最小值

3-中位数

4-众数

5-均值

6-方差

7-协方差

8-方差协方差矩阵

9-相关性

使用代码

使用这个类非常简单。
只需尝试一下,然后享受它。

一些不错的特性

你有没有尝试过编写一个可以计算众数的函数?

编写这个类对我来说是一次非常好的经验。

如果你查看 (众数) 函数,你会发现它可以计算任何类型、任何维度(小于3维)的矩阵中某个元素重复出现的次数!

最后,它会找到重复次数最多的元素并将它们作为众数返回。

这是代码:

Public Shared Function Mode(ByVal InArray As Array) As Object()


        Dim Dimentions() As Integer = size(InArray)
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim NewInArray(InArray.Length - 1) As Object

        Select Case Dimentions.Length
            Case 1
                Array.Copy(InArray, NewInArray, InArray.Length)

            Case 2
                For i = 0 To Dimentions(0) - 1
                    For j = 0 To Dimentions(1) - 1
                        NewInArray(i * Dimentions(1) + j) = InArray(i, j)
                    Next
                Next

            Case 3
                For i = 0 To Dimentions(0) - 1
                    For j = 0 To Dimentions(1) - 1
                        For k = 0 To Dimentions(2) - 1
                            NewInArray(i * Dimentions(1) * Dimentions(2) + j * Dimentions(2) + k) = InArray(i, j, k)
                        Next
                    Next
                Next

            Case Else
                MsgBox("Matrix dimention must be less than 3", MsgBoxStyle.Critical, "Statistic")
                Return Nothing
        End Select

        Array.Sort(NewInArray)
        Dim Temp As Integer
        Dim Counter As Integer = 0
        Dim ModeArray(0) As ArrayValueRepetation

        i = 0

        While i < NewInArray.Length
            Temp = 0
            ReDim Preserve ModeArray(Counter)
            For j = i To NewInArray.Length - 1
                If NewInArray(i) = NewInArray(j) Then
                    Temp += 1
                    ModeArray(Counter).RepeatTimes = Temp
                    ModeArray(Counter).Value = NewInArray(i)
                ElseIf Temp = 1 Then
                    ModeArray(Counter).RepeatTimes = Temp
                    ModeArray(Counter).Value = NewInArray(i)
                    Exit For
                Else
                    Exit For
                End If
            Next
            Counter += 1
            i = j
        End While

        Dim RepeatTimes(Counter - 1) As Integer
        For i = 0 To Counter - 1
            RepeatTimes(i) = ModeArray(i).RepeatTimes
        Next

        Dim MaxRepeat As UInteger = Max(RepeatTimes)
        Dim OutVector(0) As Object
        Dim NumberOfModes As Integer = 0
        For i = 0 To Counter - 1
            If ModeArray(i).RepeatTimes = MaxRepeat Then
                ReDim Preserve OutVector(NumberOfModes)
                'OutVector.SetValue(ModeArray(i).Value, NumberOfModes)
                OutVector(NumberOfModes) = ModeArray(i).Value
                NumberOfModes += 1
            End If
        Next

        Return OutVector
    End Function
 
© . All rights reserved.