如何在Matlab/Octave中逐步增加矩阵的维数?

如何在Matlab/Octave中逐步增加矩阵的维数?,matlab,octave,Matlab,Octave,如何通过向矩阵添加新值逐步增加矩阵维数,如下所示 octave:1> A = 1; octave:2> A(1,2) = 1; octave:3> A(1,1,2) = 1; octave:4> A(1,1,1,2) = 1; octave:5> A(1,1,1,1,2) = 1; octave:6> A(1,1,1,1,1,2) = 1; ... and so on, N times 要创建具有任意数量的八度维度的数组,只需使用vec。像这样: n =

如何通过向矩阵添加新值逐步增加矩阵维数,如下所示

octave:1> A = 1;
octave:2> A(1,2) = 1; 
octave:3> A(1,1,2) = 1;
octave:4> A(1,1,1,2) = 1;
octave:5> A(1,1,1,1,2) = 1;
octave:6> A(1,1,1,1,1,2) = 1;
 ...
and so on, N times

要创建具有任意数量的八度维度的数组,只需使用
vec
。像这样:

n = 7; # number of dimensions
x = [1 1]; # you must have at least two elements
vec (x, n)
由于倍频程修剪尾随的单个维度,所以最后一个维度不能是单个维度,这意味着您的数组必须始终至少有2个元素

或者,您也可以在使用
one
或类似函数创建数组时指定大小,并以编程方式计算大小:

n = 7;
x = ones ([repmat(1, 1, n-1) 2])

我用所需的元素数创建了一个数组,然后使用
重塑
将其设置为所需的维度。然后,要设置每个元素,必须使用线性索引,因为代码需要运行任意数量的维度

c=zeros(1,2^m);
if m > 1, c=reshape(c,2*ones(1,m)); endif;
c(1)=1;
for i=0:m-1, c(2^i+1)=1; endfor
例如,如果
m=4

octave:6> [c(1,1,1,1), c(2,1,1,1), c(1,2,1,1), c(1,1,2,1), c(1,1,1,2)]
ans =

   1   1   1   1   1

就这样?你所展示的是有效的。您希望有什么不同?用例是什么?这将有助于回答的措辞。我想添加一个新的维度N次,其中N是一个参数。是的,你在问题中说过。我的问题是你为什么要这样做。在开始计算之前,通常最好创建一个大小合适的矩阵,而不是增加它。通过添加维度来扩展它比通过向现有维度添加元素来扩展它更不寻常。理解你想用它完成什么将有助于提供一个有用的答案。但这与你的问题不符。你没有逐步增加维度。如果你想写代码来处理任意维数的矩阵,那就问问这个问题。我可以建议更好的工作流程,你目前正在做的。请注意,前两行代码可以替换为
c=0(2*one(1,m))
。对于索引,您可以做一些简单的事情,例如
indx={1,1,2,1};c(idx{:})
——首先创建一个具有适当索引的单元格数组。