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)

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

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)
于 2012-07-25T06:29:52.490 回答