0

1*11470 構造体である行列 A があり、各 A、たとえば A(1,1) には nPoints と行列の 2 つの要素があります。いくつかの計算を行うつもりです。これらの計算の後、A.matrix の要素の数は 8 倍になりますが、A.nPoints は同じになります。このプロセスの事前割り当てを行いたいのですが、方法がわかりませんでした。手伝っていただけませんか?

注: 質問を明確にするために、2 つのスクリーンショットを追加しました。私が欲しいのは、たとえば A(1,2).matrix には3つの要素があります。特定の計算を行った後、その行列内に 24 の要素があり、たとえば A2 行列を事前に割り当てる必要があります。これは、A と同じ長さ (1*110470)、nPoints のサイズは同じですが、A( 1,k).行列。

よろしく、

ここに画像の説明を入力

ここに画像の説明を入力

4

2 に答える 2

1

問題の正確な詳細をたどることはできませんでしたが、サイズが変化するマトリックスを事前に割り当てるための一般的な解決策は、最初から最大サイズに初期化することです。次に、その中に小さな数値セットを一時的に保存する必要がある場合は、サイズをリセットするのではなく、それにインデックスを付けて保存します。

たとえば、必要な最大サイズが 1x11470 の場合、変数をこのサイズに初期化します。

a = NaN(1, 11470); 

次に、小さいサイズのベクトルをその中に格納する必要がある場合は、これを行います

a(1:5) = rand(1,5);

このベクトルにアクセスする必要がある場合は、次のいずれかを実行できます

1.その場でインデックスを見つけ、

  a(~isnan(a)) 

2. サブアレイを変更するたびに、そのサイズを追跡する

a.mat = nan(1,11470)
a.idx = 5; 
a.mat(1:a.idx) = rand(1,a.idx);

速度が気になる場合は、2 番目の方法が優れています。

于 2012-12-09T22:02:21.243 に答える
1

これで問題を解決できると思います:

B = struct ('nPoints',repmat({zeros(1)},1,110470), 'matrix',repmat ({zeros([(max([tracks(:).nPoints])^3) 3])},1,110470));

そうでない場合は、お知らせください。

于 2012-12-10T22:03:13.263 に答える