如何“突出”n-d阵列的某些尺寸?

时间:2014-01-27 01:59:43

标签: matlab

假设 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 的维度。

1 个答案:

答案 0 :(得分:1)

如果您只想将平均值/中值/最大值/最小值等简单函数应用于 k -vectors,即 k - 维度结构的函数这些向量是无关紧要的,那么这就是要走的路:

s = size(M);
N = reshape(fun(reshape(M, prod(s(1 : end - k)), []).'), s(1 : end - k));

此代码假定fun对其参数的第一维进行操作,如meanmedianminmax的情况以及许多其他Matlab标准函数。

它首先将 M 重新整形为二维数组,其中第一个维度对应于 M 的第一个 n - k 维度,第二个维度对应于 M 的最后 k 维度。通过转置fun在第二组维度上运行。它为每列返回一个标量,这样结果可以重新形成一个对应于第一个 n - k ) - 维数组 N > n - k M 的维度。