Suggérez des moyens plus rapides et plus efficaces pour aplatir différentes longueurs de matricesTout,
Bien que je connaisse un moyen de faire cela, je ne pense pas que ce soit le moyen le plus efficace. Des idées pour rendre cela plus efficace?
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: Suggère des moyens plus rapides et plus efficaces pour aplatir différentes longueurs de matricesCette méthode semble être relativement rapide.
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 );
Au fait, soyez prudent avec les jointures cartésiennes, elles grossissent très vite. 
Re: Suggère des moyens plus rapides et plus efficaces pour aplatir différentes longueurs de matricesAlors, vous voulez la jointure cartésienne de toutes vos matrices?
Encore une fois, je n’ai fait aucun test de chronométrage, mais qu’en est-il?
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: Suggère des moyens plus rapides et plus efficaces pour aplatir différentes longueurs de matrices @Jeff_Perkinson ,
Je m'inquiète de la mise en boucle plutôt que de la conversion dans la table de données. En outre, je veux que ma table résultante ait toutes les combinaisons possibles comme

Re: Suggère des moyens plus rapides et plus efficaces pour aplatir différentes longueurs de matricesJe n'ai pas fait de test de synchronisation, mais utiliser As Table () comme cela peut être plus rapide.
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);