Schlagen Sie schnellere und bessere Möglichkeiten vor, um unterschiedliche Längen der Matrizen zu glättenAlles,
Ich kenne zwar einen Weg, dies zu tun, denke aber nicht, dass dies der effizienteste Weg ist. Irgendwelche Gedanken, um dies effizienter zu gestalten?
Matrix1 = [1,2,3,4,5];
Matrix2 = [2,3,5];
Matrix3 = [7,8,9,10];
ColAVals = {};
ColBVals = {};
ColCVals = {};
for(i = 1, i <= N rows(Matrix1), i++,
for(r = 1, r <= N rows(Matrix2), r++,
for(s = 1, s <= N rows(Matrix3), s++,
Insert Into(ColAVals,Matrix1[i]);
Insert Into(ColBVals,Matrix2[r]);
Insert Into(ColCVals,Matrix3[s]);
);
);
);
Show(ColAVals);
Show(ColBVals);
Show(ColCVals);
dt = New Table("Test");
dt << New Column("A",Numeric,Continuous, << set Values(ColAVals))
<< New Column("B",Numeric,Continuous, << set Values(ColBVals))
<< New Column("C",Numeric,Continuous, << set Values(ColCVals));Re: Schlagen Sie schnellere und bessere Möglichkeiten vor, um unterschiedliche Längen von Matrizen zu glättenDiese Methode scheint relativ schnell zu sein.
nmat = 15;
matrices = {};
For( i = 1, i <= nmat, i++,
matrices[i] = J( Random Integer( 5 ), 1, Random Uniform() )
);
start = Tick Seconds();
m1 = As Table( matrices[1] );
m2 = As Table( matrices[2] );
dt = m1 << Join( With( m2 ), Cartesian Join, private );
Close( m1, nosave );
Close( m2, nosave );
For( i = 3, i < N Items( matrices ), i++,
mi = As Table( matrices[i] );
dt = dt << Join( With( mi ), Cartesian Join, private );
Close( mi, nosave );
);
mlast = As Table( matrices[N Items( matrices )] );
dt = dt << Join( With( mlast ), Cartesian Join );
Close( mlast, nosave );
end = Tick Seconds();
total = end - start;
Show( total );
Übrigens, seien Sie vorsichtig mit Cartesian Joins, sie werden sehr schnell groß. 
Re: Schlagen Sie schnellere und bessere Möglichkeiten vor, um unterschiedliche Längen von Matrizen zu glättenSie wollen also den kartesischen Join aller Ihrer Matrizen?
Wieder habe ich keine Zeitmessungstests gemacht, aber was ist damit?
Matrix1 = [1, 2, 3, 4, 5];
Matrix2 = [2, 3, 5];
Matrix3 = [7, 8, 9, 10];
dts = {};
dts[1] = As Table( matrix1 );
dts[2] = As Table( matrix2 );
dts[3] = As Table( matrix3 );
dt = dts[1] << Join( With( dts[2] ), Cartesian Join );
For( i = 3, i <= N Items( dts ), i++,
dt = dt << Join( With( dts[i] ), Cartesian Join );
);Re: Schlagen Sie schnellere und bessere Möglichkeiten vor, um unterschiedliche Längen von Matrizen zu glätten @ Jeff_Perkinson .
Ich mache mir eher Sorgen um das Looping als um die Konvertierung in die Datentabelle. Außerdem möchte ich, dass meine Ergebnistabelle alle möglichen Kombinationen enthält

Re: Schlagen Sie schnellere und bessere Möglichkeiten vor, um unterschiedliche Längen von Matrizen zu glättenIch habe keine Zeitmessungstests durchgeführt, aber die Verwendung von As Table () ist möglicherweise schneller.
matrix1 = [1,2,3,4,5];
matrix2 = [2,3,5];
matrix3 = [7,8,9,10];
maxrows=maximum(nrow(matrix1), nrow(matrix2), nrow(matrix3));
matrix1 = matrix1 |/ j(maxrows-nrow(matrix1), 1, .);
matrix2 = matrix2 |/ j(maxrows-nrow(matrix2), 1, .);
matrix3 = matrix3 |/ j(maxrows-nrow(matrix3), 1, .);
mat=matrix1 || matrix2 || matrix3;
dt=as table(mat);