1

matlabで大きなテーブルを簡単に初期化できるようにしたいと思います。

境界x、y、z = 5、4、3があるとします。各要素がカウントと合計を格納する構造体である5x4x3テーブルを作成できるようにしたいです。この構造体のカウントと合計は、初期化時に0である必要があります。

私はこれを行うのに十分だと思いました:

table = []
table(5,4,3) = struct('sum', 0, 'count', 0)

そして、これはダブルでは機能しますが、明らかに構造では機能しません。

何か案は?

編集:

別の質問として、(必要に応じて)matlabに構造体を格納するように強制する方法がありますが、要素(つまり、table(1、2、3))にアクセスすると、平均(つまり、table)を返すようになります。 (1,2,3).sum / table(1,2,3).count)。

それは質問に不可欠ではありませんが、それは確かにクールでしょう。

4

1 に答える 1

2

table = []エラーを回避するには、行を置き換えるだけです。

clear table;
table(5,4,3) = struct('sum', 0, 'count', 0)

正常に動作します。ただし、このコマンドは配列の1つのフィールドのみを初期化することに注意してください。つまり、メモリの割り当ては不完全です。配列のすべてのフィールドを初期化するには、次を使用できます

table2(1:5,1:4,1:3) = struct('sum', 0, 'count', 0)

違いを視覚化するには、を使用whosします。

>> whos
  Name        Size             Bytes  Class     Attributes  
  table       5x4x3              736  struct              
  table2      5x4x3             8288  struct  

2番目の質問は、たとえば無名関数を使用して解決できます

 myMean = @(a) a.sum./a.count; %define the function

 myMean(table2(2,2,2)) % access the mean in the field (2,2,2)
于 2012-07-25T06:29:52.490 に答える