私は6 * n * n * 3行と6 * n * n点の3次元座標を表す1つの列を持つmatlabの行列xを持っています。座標は、行1:6 * n * nがx座標であり、行6 * n * n + 1:12 * n * nがy座標であり、12 * n * n + 1:18 * n * nはz座標である。matlabの行列を再構成する
与えられた点のx、y、z座標を単に置き、もう一方の行iが他のすべての点に点iを減算することで構成される2つの新しい行列を作成したいと思います。
今は、n> 16で非常に遅いdouble forループを使用しています。 matlabのベクトル/行列の機能を使ってこれを行うより良い/より速い方法がありますか?
ここでは、私はあなたのデータがどのように見えるかのアイデアを持っていますが、のは簡単な事で試してみて、私は最終的に私の答えを拡張しますせてはいけない私の現在のコード
x=x(1:6*n*n);
y=y(6*n*n+1:12*n*n);
z=z(12*n*n+1:18*n*n);
N=6*n*n;
points=[];
difs=[];
for i=1:N
difrow=[];
points=[points;x(i) y(i) z(i)];
for j=1:N
deltax=x(i)-x(j);
deltay=y(i)-y(j);
deltaz=z(i)-z(j);
difrow=[difrow deltax deltay deltaz];
end
difs=[difs;difrow];
end
点は、N行(各点に1つ)と3つの列(各点座標に1つ)の行列である必要があります。上記のコードは、1行と3 * N列のポイント行列を与えます。 – JennyToy
私は参照してください。いいえx、y、zはそれぞれN長の行です。 – JennyToy
OKサイズは '[1 x N]' – rahnema1