例如,在matlab中计算沿着nd数组维度的每个二进制位的平均值,沿着4d数组的dim 4平均每10个元素
x = reshape(1:30*30*20*300,30,30,20,300);
n = 10;
m = size(x,4)/10;
y = nan(30,30,20,m);
for ii = 1 : m
y(:,:,:,ii) = mean(x(:,:,:,(1:n)+(ii-1)*n),4);
end
看起来有点傻 . 我认为必须有更好的方法来平均垃圾箱?
此外,是否可以使脚本适用于一般情况,即,对数组进行仲裁,并沿着仲裁调整平均值?
2 回答
对于问题的第二部分,您可以使用:
对于问题的第一部分,这里是使用
cumsum
和diff
的替代方法,但它可能不比循环解决方案更好:这是一个使用
accumarray
函数的通用解决方案 . 我没有测试它有多快 . 可能还有一些改进的余地 .基本上,accumarray将x中的值按照您的问题的自定义索引矩阵进行分组
如果您需要更快,更高效的内存操作,则必须编写自己的mex函数 . 我想,这应该不会那么困难!