在Matlab中创建和初始化结构的3D表的简便方法

时间:2012-07-25 01:55:28

标签: matlab struct

我希望能够轻松地在matlab中初始化一个大表。

假设我有边界x,y,z = 5,4,3。我希望能够创建一个5x4x3表,其中每个元素都是一个存储count和sum的结构。初始化时,此结构中的计数和求和应为0。

我认为这样就足够了:

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

这对于双人而言是有效的,但显然没有结构。

有什么想法吗?

编辑:

作为另一个问题,(如果你愿意,奖励)是否有办法强制matlab存储结构,但当你访问元素(即表(1,2,3))时,让它返回平均值(即表(1,2,3).sum / table(1,2,3).count)。

它对这个问题并不重要,但肯定会很酷。

1 个答案:

答案 0 :(得分:2)

您只需要替换行table = []以避免错误,即

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

工作正常。但请注意,此命令仅初始化数组的一个字段,即内存分配不完整。要初始化数组的所有字段,可以使用

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  

您的第二个问题可以解决,例如,使用匿名函数

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

 myMean(table2(2,2,2)) % access the mean in the field (2,2,2)