2014-04-30 66 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. 如果两个尺寸必须被调整大小兼用数组的数组或数组的集合,并根据需要纠正回路