我是Octave的初学者,想知道如何创建
矩阵n
的{{1}}长度向量,其中每个m_1, m_2, ..., m_n
的维数相同。
基本上,我想用一个函数做这样的事情
称为m_i
-如果在Octave中有类似的功能
存在:
vector_of_matrices
非常感谢任何指导。
答案 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>
希望有帮助!