我有这个数组:
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)中,是否有某种方法可以将此静态数组转换为动态数组?
提前致谢。
答案 0 :(得分:3)
虽然这并不能完全符合您的要求(由于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;
答案 1 :(得分:1)
动态数组与普通数组不同。
动态数组是指针,而普通数组是内存块。使用一维数组,您可以使用数组的地址。但是对于多维数组,这个技巧将不起作用。
在你的情况下,我会使用一个文件来初始化数组。因此,您可以100%使用动态数组。否则你必须编写自己的转换,这会破坏dymanic数组的目的。
答案 2 :(得分:0)
你不能投,但你可以复制!有点像...
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);
答案 3 :(得分:-1)
您可能应该使用open arrays吗?