Octave 如何创建矩阵的向量(数组)?
我是一个八度音阶的初学者,想知道如何创建八度音阶 矩阵Octave 如何创建矩阵的向量(数组)?,octave,Octave,我是一个八度音阶的初学者,想知道如何创建八度音阶 矩阵m_1,m_2,…,m_n的n长度向量,其中每个m_i具有相同的维数 基本上,我想用一个函数做这样的事情 被称为矩阵的向量-,如果有类似的八度函数 存在: 非常感谢您的指导。我想到了两种“本地”方法:(a)使用单元阵列,或(b)使用三维阵列。两者都不能完全满足您的期望行为: m1=rand(3,2) m2=一(3,2) m3=眼睛(3,2) %方法#1:单元阵列 vm={m1,m2,m3} vm{2}==一(3,2) %方法2:三维阵列 vm
m_1,m_2,…,m_n
的n
长度向量,其中每个m_i
具有相同的维数
基本上,我想用一个函数做这样的事情
被称为矩阵的向量-,如果有类似的八度函数
存在:
非常感谢您的指导。我想到了两种“本地”方法:(a)使用单元阵列,或(b)使用三维阵列。两者都不能完全满足您的期望行为:
m1=rand(3,2)
m2=一(3,2)
m3=眼睛(3,2)
%方法#1:单元阵列
vm={m1,m2,m3}
vm{2}==一(3,2)
%方法2:三维阵列
vm=猫(3,m1,m2,m3)%Cris Luengo的这一调整
vm(:,:,2)=一(3,2)
使用单元格数组几乎具有所需的行为,唯一的区别是,您必须使用{}
来“索引”适当的元素,因为()
将只返回相应的单元格,而{}
返回其内容。此外,对于单元数组,并非所有矩阵都必须具有相同的维数。就我个人而言,这是我最喜欢的
三维数组也可以很好地工作,但推广起来似乎相当复杂。使用匿名函数,可以简化生成过程,如下所示:
u矩阵的向量u=@(varargin)cat(3,varargin{:});
vm=矩阵(m1,m2,m3)的向量
但是,您不能全局覆盖()
(subindex
)操作符,因为这会影响所有数组访问
如果您明确地希望具有所描述的行为,您可以设置一个类向量_矩阵
,在内部实现-例如-使用方法#1,并设置/覆盖()
操作符
希望有帮助 我认为定制类的想法不是很多工作——它可以在几行代码中完成。但在MATLAB中,您永远无法执行
vm(1)(3,4)
。解析器不接受一行中的两组括号。因此,该类的功能非常有限。单元阵列更易于使用。:)@CrisLuengo因为这个问题是关于倍频程的,所以我想这里没有必要为MATLAB用户着想。我很高兴看到您实现了一个类,因为我从来没有使用过它们,而且篇幅很短,但完整的示例总是一个好处(我看的是您的Octave文档)。您是说Octave确实允许这种语法吗?@CrisLuengo啊-您的评论听起来好像可以在Octave中实现,但在MATLAB中却不行。我现在做了以下测试:vm_访问=@(x)vm(:,:,x),vm_访问(1)(2,2)
。真管用@HansHirse-不知道细胞阵列。。thnx用于提示。
vm = vector_of_matrices( [ rand(2,3) ; ones(2,3) ]
vm(2) == ones(2,3) % this should be '1' or 'true'