2014-04-30 67 views
10

我正在嘗試將數據從2個雙精度數組移動到2個不同的雙精度數組。我不確定尺寸會變大,因爲我正在從第一個數組中取出一個隨機樣本並將其放入第二個數組中。ReDim保留「下標超出範圍」

當我添加ReDim保留線時,出現下標超出範圍錯誤。

Function CreateTrainingSet(TrainingPercent As Double, Inputs() As Double, Outputs() As Double) 
' Create Randomized Training set data 
Dim TrainingInputs() As Double, TrainingOutputs() As Double 
Dim i As Integer, j As Integer, count As Integer 
'ReDim TrainingInputs(UBound(Inputs, 1), UBound(Inputs, 2)) 
'ReDim TrainingOutputs(UBound(Outputs, 1), UBound(Outputs, 2)) 
count = 0 

' Move TraningPercent % of data from Inputs and Outputs to TrainingInputs and TrainingOutputs 
For i = LBound(Inputs, 1) To UBound(Inputs, 1) 
    Dim ran As Double 
    ran = Rnd() 
    If ran <= TrainingPercent Then 
    count = count + 1 
    For j = LBound(Inputs, 2) To UBound(Inputs, 2) 
    ReDim Preserve TrainingInputs(1 To count, 1 To UBound(Inputs, 2)) 
    TrainingInputs(count, j) = Inputs(i, j) 
    Next j 
    For j = LBound(Outputs, 2) To UBound(Outputs, 2) 
    ReDim Preserve TrainingOutputs(1 To count, 1 To UBound(Outputs, 2)) 
    TrainingOutputs(count, j) = Outputs(i, j) 
    Next j 
    End If 
Next i 

For i = LBound(TrainingInputs, 1) To UBound(TrainingInputs, 1) 
    For j = LBound(TrainingInputs, 2) To UBound(TrainingInputs, 2) 
    Cells(i, j + 10).Value = TrainingInputs(i, j) 
    Next j 
Next i 


End Function 
+0

你在'redim preserve'行有錯誤嗎? – PowerUser

+11

使用「保留」時,只能重新設置二維數組的*上一個*維。 –

+0

謝謝蒂姆。那麼有沒有另一種方法可以做到這一點? – atomant

回答

15

總結以上各種意見,回答:

  • 只能REDIM多維數組

的最後一個維度因此爲了調整一個多維數組有是一對簡單的選項:

  1. 如果只有一個維度需要b È調整圍繞翻轉循環和邏輯,這樣被調整的尺寸變最後一維
  2. 如果兩個尺寸必須被調整大小兼用數組的數組或數組的集合,並根據需要糾正迴路