我希望能够轻松地在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)。
它对这个问题并不重要,但肯定会很酷。
答案 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)