假设 M 是 n - 维数组(数字)。我们也可以将 M 视为( n - k ) - k维数组的维数组。我想生成对应于将一些函数 f 应用于每个 k - 维数组的数组。
更确切地说,我想生成一个新的( n - k ) - 维数组 N ,其中每个单元格的值名词的( I <子> 1 子>, I <子> 2 子>,..., I nk -1 , i nk )是通过应用(标量)获得的在 M ( i 1 >, I <子> 2 子>,..., I <子> NK -1 子>,我 <子> NK 子>)。
(函数 f 通常是一些“汇总函数”,如均值,中位数,最大值或最小值。)
我认为这样做的方式会以某种方式涉及arrayfun
,但我无法弄清楚如何让arrayfun
只在第一个上进行迭代( n - k ) M 的维度。
答案 0 :(得分:1)
如果您只想将平均值/中值/最大值/最小值等简单函数应用于 k -vectors,即 k - 维度结构的函数这些向量是无关紧要的,那么这就是要走的路:
s = size(M);
N = reshape(fun(reshape(M, prod(s(1 : end - k)), []).'), s(1 : end - k));
此代码假定fun
对其参数的第一维进行操作,如mean
,median
,min
和max
的情况以及许多其他Matlab标准函数。
它首先将 M 重新整形为二维数组,其中第一个维度对应于 M 的第一个 n - k 维度,第二个维度对应于 M 的最后 k 维度。通过转置fun
在第二组维度上运行。它为每列返回一个标量,这样结果可以重新形成一个对应于第一个 n - k ) - 维数组 N > n - k M 的维度。