Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Octave 如何创建矩阵的向量(数组)?_Octave - Fatal编程技术网

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'