基于大小向量的子矩阵
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{:})
看来这个问题应该很普遍,但我还没有找到一个很好的副本...
我正在实现具有可变大小多维输出的 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{:})