如何创建矩阵的向量(数组)?

时间:2019-11-18 03:06:14

标签: octave

我是Octave的初学者,想知道如何创建 矩阵n的{​​{1}}长度向量,其中每个m_1, m_2, ..., m_n的维数相同。

基本上,我想用一个函数做这样的事情 称为m_i-如果在Octave中有类似的功能 存在:

vector_of_matrices

非常感谢任何指导。

1 个答案:

答案 0 :(得分:1)

我想到了两种“本机”方法:(a)使用单元格数组,或(b)使用3维数组。两者都不能完全满足您的期望行为:

m1 = rand(3, 2)
m2 = ones(3, 2)
m3 = eye(3, 2)

% Approach #1: Cell array
vm = { m1, m2, m3 }
vm{2} == ones(3, 2)

% Approach #2: 3-dimensional array
vm = cat(3, m1, m2, m3)                % Thanks to Cris Luengo for this tweak
vm(:, :, 2) == ones(3, 2)

使用单元格数组几乎具有所需的行为,唯一的区别是,您必须使用{}对适当的元素进行“索引”,因为()只会返回相应的单元格,但是{}返回其内容。同样,对于单元阵列,不必所有矩阵都具有相同的尺寸。就个人而言,这将是我的最爱。

3维数组也可以正常工作,但概括起来似乎很复杂。使用匿名函数,可以简化生成,如下所示:

vector_of_matrices = @(varargin) cat(3, varargin{:});
vm = vector_of_matrices(m1, m2, m3)

尽管如此,您不能全局覆盖()subsindex)运算符,因为这会影响所有数组访问。

如果您明确希望具有所描述的行为,则可以设置类vector_of_matrices,该类在内部实现-例如,使用方法#1,并设置/覆盖()运算符。 / p>

希望有帮助!