基于大小向量的子矩阵

Submatrix based on size vector

看来这个问题应该很普遍,但我还没有找到一个很好的副本...

我正在实现具有可变大小多维输出的 2 级 S-Function。状态必须是固定大小的 Dwork 向量,所以我将输入矩阵零填充到输入允许的最大大小,然后将其重塑为向量。

当我将其重新整形为输出矩阵时,我需要trim将其恢复到正确的大小。

该函数需要足够通用以支持任意数量的维度。输出的大小存储在大小数组中。

例如,我可能有一个 500x500 的矩阵 N,以及一个大小数组 S = [40 25]。我需要一个可以给我 N(1:S(1), 1:S(2)) 的 MATLAB 表达式,但它需要适用于任意数量的维度,所以我不能像那样简单地对其进行硬编码.

这里有一个 m 代码的解决方案:

%your input
M=rand(10,10,10);
S=[2,3,4]
%generate indices:
Index=arrayfun(@(x)(1:x),S,'uni',0)
%use comma separated list to index:
smallM=M(Index{:})