我在VB.net中声明了一些二维数组,如下所示:
Public TrainingSet_Inputs()() As Double
Public TrainingSet_Outputs()() As Double
Public OriginalData_Inputs()() As Double
Public OriginalData_Outputs()() As Double
然后在sub中创建另一组数组,如下所示:
Dim Inputs()() As Double
Dim Outputs()() As Double
我将信息存储到其中,之后我做了以下修改和分配:
' store original data
OriginalData_Inputs = Inputs
OriginalData_Outputs = Outputs
TrainingSet_Inputs = normalise(Inputs)
TrainingSet_Outputs = normalise(Outputs)
在执行规范化后,似乎会修改OriginalData数组中的值以匹配TrainingSet。从我的数组定义方式来预期这种行为吗?没有其他代码我将OriginalData分配给TrainingSet。
编辑:
我现在明白数组是引用类型,并且已经将问题标题修改为我认为更有用的搜索项。
答案 0 :(得分:2)
通过键入Array1 = Array2,您只需设置引用,不要复制值。 使用
Dim OriginalData_Inputs As Double(Inputs.Count-1)()
For i = 0 To Inputs.Count - 1
OriginalData_Inputs(i) = Inputs(i).Clone
Next
这实际上创建了所有数组的副本,而不仅仅是创建引用。它应该工作。
答案 1 :(得分:2)
数组类型为reference types而不是value types 引用类型的变量存储对其数据的引用。
我可以用非常简单的方式解释你的情况:
假设在初始化(新)之后,六个数组具有不同的引用值,如下所示:
TrainingSet_Inputs --> has a reference value of 2000
TrainingSet_Outputs --> has a reference value of 4000
OriginalData_Inputs --> has a reference value of 6000
OriginalData_Outputs --> has a reference value of 8000
Inputs --> has a reference value of 10000
Outputs --> has a reference value of 12000
我们可以将这些引用想象成内存中存储这些虚构值的4个字节,这些虚构值是指向存储数组实际值的内存位置的指针。
分配时
OriginalData_Inputs = Inputs
OriginalData_Outputs = Outputs
您已更改OriginalData数组的参考值。 (旧的值指向的先前内存将在此调用后的某个时间由Garbage Collector释放)
TrainingSet_Inputs --> has a reference value of 2000
TrainingSet_Outputs --> has a reference value of 4000
OriginalData_Inputs --> has a reference value of 10000
OriginalData_Outputs --> has a reference value of 12000
Inputs --> has a reference value of 10000
Outputs --> has a reference value of 12000
现在,接下来发生的事情取决于方法normalise
,但我想这个方法只返回对输入数组的相同引用,因此你的情况变得
TrainingSet_Inputs --> has a reference value of 10000
TrainingSet_Outputs --> has a reference value of 12000
OriginalData_Inputs --> has a reference value of 10000
OriginalData_Outputs --> has a reference value of 12000
Inputs --> has a reference value of 10000
Outputs --> has a reference value of 12000
所有Inputs数组现在具有相同的参考值,因此对于Outputs数组