programing

ReDim "가입자 범위를 벗어남" 유지

testmans 2023. 6. 19. 21:17
반응형

ReDim "가입자 범위를 벗어남" 유지

2개의 Double Arrays에서 2개의 다른 Double Arrays로 데이터를 이동하려고 합니다.첫 번째 배열에서 무작위로 샘플을 추출해서 두 번째 배열에 넣는 중이라 사이즈가 어떻게 될지 잘 모르겠습니다.

RedDim Preserve 라인을 추가하면 Subscribers Out of Range 오류가 발생합니다.

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

위의 의견을 답변으로 요약합니다.

  • 다중 차원 배열의 마지막 차원만 재지정할 수 있습니다.Preserve.

따라서 다중 차원 배열의 크기를 조정하려면 몇 가지 간단한 옵션이 있습니다.

  1. 한 차원만 크기를 조정해야 하는 경우 크기를 조정할 차원이 마지막 차원이 되도록 루프와 논리를 뒤집습니다.
  2. 두 차원 모두 크기를 조정해야 하는 경우 어레이 또는 어레이 모음을 사용하고 필요에 따라 루프를 수정합니다.

언급URL : https://stackoverflow.com/questions/23393123/redim-preserve-subscript-out-of-range

반응형