我有这样的数组:
const / var
_Data : array [0..4] of array [0..3] of Double =
((0,0,0,0),
(0,0,1,1),
(1,0,1,0),
(1,1,0,0),
(1,1,1,1));
我想它当作这个过程参数值的方式:
procedure NN.NetTraining(Data: TDoubleMatrix);
哪里:
TDoubleArray = array of Double;
TDoubleMatrix = array of TDoubleArray;
是否有某种方式在Delphi(2009)投或转换这种静态数组动态数组?
提前致谢。
当你想要什么(在Gamecat的答案给出的原因),这并不这样做,它可能是一个可行的变通为您初始化动态数据数组:
var Data:TDoubleMatrix; begin Data:=TDoubleMatrix.create(TDoubleArray.create(0,0,0,0), TDoubleArray.create(0,0,1,1), TDoubleArray.create(1,0,1,0), TDoubleArray.create(1,1,0,0), TDoubleArray.create(1,1,1,1)); end;
动态数组从正常阵列不同。
动态阵列是指针,而正常阵列的存储器块。 随着一个维数组,你可以使用数组的地址。 但随着多维数组这一招是行不通的。
在你的情况,我会用一个文件来初始化数组。 所以,你可以使用动态数组的100%的时间。 否则,你必须写自己的转换哪种类型的失败dymanic阵列的目的。
你可以不投,但你可以复制! 就像是...
procedure CopyDMatrix(var Source; LengthX, LengthY: integer; var Dest: TDoubleMatrix);
const
SizeOfDouble = SizeOf(Double);
var
n : integer;
ptr: pointer;
begin
SetLength(Dest, LengthX);
Ptr := @Source;
for n := 0 to LengthX - 1 do begin
SetLength(Dest[n], LengthY);
Move(ptr^, Dest[n][0] , SizeOfDouble * LengthY);
inc(cardinal(ptr), SizeOfDouble * LengthY);
end;
end;
//...
CopyDMatrix(Data, Length(Data), Length(Data[0]), DoubleMatrix);