2

ループ内でサイズが大きくなる配列があります。matlab での解決策は、x = zeros(1, 9); を使用したゼロによる事前割り当てです。私の問題は、配列の最初と最後にゼロが含まれることがあることです。これらのゼロは私のデータの一部です。配列のサイズが 5 のとき、後で 7 のとき、最後に要素が 9 のとき、配列を操作する必要があります。em を割り当て前のゼロと混同しないようにするにはどうすればよいですか?

更新 NAN の使用が最も簡単な方法であり、私にとってはうまくいきました。また、Prashant は、他の要件に対してうまく機能する、より複雑なソリューションを投稿しました。(私の機能は非常に単純です。)

4

3 に答える 3

5

最も簡単な方法は、事前に割り当てることですNaN

dataArray = nan(nRows, nColumns)

コードの残りの部分がインデックスを追跡していることを確認することもできますが、それNaNは非常に簡単です。

于 2012-07-21T03:37:29.053 に答える
1

変数でサイズを追跡します。
具体的な回答を得るには、使用状況について詳しく知る必要がありますが、次のようなことを検討してください。

Preallocate max space for mem
While looping over data sets
    Set k = 1
    While looping over data set elements
        Add element to mem(k)
        Set k = k + 1
    End
    Extract the data you want with mem(1:k-1)
    Use the extracted data
End

通常、セットがどれだけ大きくなるかを知ることができるため、Matlab は事前に割り当てられたデータを好みます。

While looping over data sets
    Determine size of data set, and preallocate mem here with that size
    Set k = 1
    While looping over data set elements
        Add element to mem(k)
        Set k = k + 1
    End
    mem already has exactly the data you need, so begin using it
End

そしてもちろん、ループとカウンタ変数を取り除くためにベクトル コマンドを使用することをお勧めします。

While looping over data sets
    Use vector calculation with only the input you need to produce only the output you need
    mem already has exactly the data you need, so begin using it
End
于 2012-07-21T03:36:11.267 に答える
1

NaN 値など、さまざまな方法で行列を初期化できます(または、どのように埋めるかによって、値にx = nan * ones(1, 9);置き換える場合は、開始したい他の値)。nan

于 2012-07-21T03:36:11.937 に答える