Hallo Leute,
ich habe ein Datenfile mit ca. 56000 Koordinaten. Die bestehen aus jeweils einem X-Achsenwert (Typ Double), einem Y-Achsenwert(Typ Double), einen Zeitstempel und einem weiteren Parameter vom Typ Integer.
Ich möchte die Häufigkeit des Auftretens jedes Koordinatenpaares ermitteln. Dabei ist es nicht notwendig jede Koordinaten zu zählen, ein definiertes Spektrum um die Koordinatenposition herum reicht völlig aus.
Das Problem ist, dass das alles extreme lange dauert. Kann man das Clustern und durchzählen irgendwie beschleunigen? Ist ein Dictionary ratsam? Nützt mir das was in meinem Fall etwas? Kann ich das Dictionary auch nach zwei Werten durchsuchen (X, und Y-Coordinate)?
DataList: Darin sind die Werte gespeichert.
Diese List wird in mehreren Durchläufen, durch berechnen der noch leeren Paramter (IntXBlock,...), gefüllt.
Vielen Dank schonmal für Eure Hilfe!
ich habe ein Datenfile mit ca. 56000 Koordinaten. Die bestehen aus jeweils einem X-Achsenwert (Typ Double), einem Y-Achsenwert(Typ Double), einen Zeitstempel und einem weiteren Parameter vom Typ Integer.
Ich möchte die Häufigkeit des Auftretens jedes Koordinatenpaares ermitteln. Dabei ist es nicht notwendig jede Koordinaten zu zählen, ein definiertes Spektrum um die Koordinatenposition herum reicht völlig aus.
Das Problem ist, dass das alles extreme lange dauert. Kann man das Clustern und durchzählen irgendwie beschleunigen? Ist ein Dictionary ratsam? Nützt mir das was in meinem Fall etwas? Kann ich das Dictionary auch nach zwei Werten durchsuchen (X, und Y-Coordinate)?
DataList: Darin sind die Werte gespeichert.
Diese List wird in mehreren Durchläufen, durch berechnen der noch leeren Paramter (IntXBlock,...), gefüllt.
VB.NET-Quellcode
- Structure CapCurvePower
- Dim dteDatum As Date
- Dim dteTime As Date
- Dim intX As Integer
- Dim intY As Integer
- Dim Counter As Integer
- Dim intXBlock As Integer
- Dim intYBlock As Integer
- Dim Flag As Boolean
- Dim BlockColor As Color
- End Structure
- Private Function MaxValue() As Integer
- Dim max As Integer = 0
- For i As Integer = 0 To DataList.Count - 2
- max = System.Math.Max(DataList.Item(i).intX, max)
- Next
- Return max
- End Function
- Private Function Clustergroesse(intXValue As Integer, Clusteranzahl As Integer) As Integer
- Dim intClustergroesse As Integer
- intClustergroesse = intMaxValue / Clusteranzahl
- Return intClustergroesse
- End Function
- Private Sub clustern()
- Dim RowValue As CapCurvePower
- Dim intMaxX As Integer = MaxValue()
- Dim Cluster As Integer = Clustergroesse(intMaxX, 45) '45=Clusteranzahl
- For i As Integer = 0 To DataList.Count - 1
- Dim tmp As CapCurvePower = DataList(i)
- tmp.intXBlock = CInt((DataList.Item(i).intX / Cluster))
- tmp.intYBlock = CInt((DataList.Item(i).intY / Cluster))
- DataList(i) = tmp
- Next
- End Sub
- Private Sub Counter()
- For RowCnt As Integer = 0 To DataList.Count - 1
- Dim intSearchCounter As Integer = 0
- For CurrentRow As Integer = RowCnt To DataList.Count - 1
- If DataList.Item(CurrentRow).intXBlock = DataList.Item(RowCnt).intXBlock AndAlso DataList.Item(CurrentRow).intYBlock = DataList.Item(RowCnt).intYBlock Then
- If DataList.Item(CurrentRow).Flag = False Then
- intSearchCounter = intSearchCounter + 1
- Dim tmp As CapCurvePower = DataList(CurrentRow)
- tmp.Counter = DataList.Item(CurrentRow).Counter + 1
- DataList(CurrentRow) = tmp
- End If
- End If
- Next
- For i As Integer = 0 To DataList.Count - 1
- If DataList.Item(i).intXBlock = DataList.Item(RowCnt).intXBlock AndAlso DataList.Item(i).intYBlock = DataList.Item(RowCnt).intYBlock AndAlso DataList.Item(i).Flag = False Then
- Dim tmp As CapCurvePower = DataList(i)
- tmp.Counter = intSearchCounter
- tmp.Flag = True
- DataList(i) = tmp
- End If
- Next
- Next
- End Sub
Vielen Dank schonmal für Eure Hilfe!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DocBizz“ ()