在Octave中循环遍历变量名

时间:2019-11-28 08:37:40

标签: octave

我正在逐列对矩阵应用转换,但问题是这种转换不会平等地影响每一列,从而给我留下了不同长度的列的集合。我想进一步遍历这些专栏,但是找不到在Octave中写词的方法。

for v = 1:6
    gate_values( 1, (2*v)   ) = C(1, v);
    gate_values( 1, (2*v)-1 ) = t(1);

    for i = 1 : (length(C) - 1)
        if C( i+1, v ) - C(i, v) > 0.05  % Taken as 10% of bin value
            gate_values( i+1, (2*v)   ) = C( i+1,v );
            gate_values( i+1, (2*v)-1 ) = t( i+1 );
        endif
    endfor
    t_imp = toc
endfor 

gate_values_1(:,1)= nonzeros( gate_values(:, 1) );
gate_values_1(:,2)= nonzeros( gate_values(:, 2) );
gate_values_2(:,1)= nonzeros( gate_values(:, 3) );
gate_values_2(:,2)= nonzeros( gate_values(:, 4) );
gate_values_3(:,1)= nonzeros( gate_values(:, 5) );
gate_values_3(:,2)= nonzeros( gate_values(:, 6) );
gate_values_4(:,1)= nonzeros( gate_values(:, 7) );
gate_values_4(:,2)= nonzeros( gate_values(:, 8) );
gate_values_5(:,1)= nonzeros( gate_values(:, 9) );
gate_values_5(:,2)= nonzeros( gate_values(:,10) );
gate_values_6(:,1)= nonzeros( gate_values(:,11) );
gate_values_6(:,2)= nonzeros( gate_values(:,12) );

非零函数意味着列的长度将不同,因此我不能简单地以这种方式填充矩阵,是否有一种方法可以通过迭代(例如,我尝试过的)来创建这些gate_value列(在变体中)。

for k=1:6
    gate_values_k(:,1) = nonzeros( gate_values(:,1) );

但这会导致错误(作为参考,我假设这是可能的,因为在vba中我可以编写gate_values_&k来实现此目的)。谢谢。

1 个答案:

答案 0 :(得分:1)

数字数组通常不允许您使用不同长度的列。显然,如果您的按列操作涉及到该操作的“零元素”,则只需用该零元素填充列即可。

否则,您可能正在寻找'cell arrays'。大概您可以创建一个单元格数组,其中每个单元格都包含一个矢量(长度与其他所有单元格不相等),然后使用诸如arrayfun,cellfun,accumdim / accumarray等之类的东西(取决于您要执行的确切操作)在单元之间执行聚合操作。