Octave 对于八度音阶的变量名上的循环

Octave 对于八度音阶的变量名上的循环,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

我将逐列变换应用于矩阵,问题是这种变换不会对每一列产生相同的影响,从而留下一组不同长度的列。我想进一步迭代这些列,但找不到用八度来表示它的方法

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) );
nonzeros函数意味着列的长度将不同,因此我不能简单地用这种方式填充矩阵,是否有一种方法可以通过迭代创建这些gate_值列,例如我尝试过的(在各种变体中)


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

数字数组通常不允许有不同长度的列。显然,如果您的列操作涉及与该操作相关的“零元素”,您可以简单地使用该零元素填充列


否则,您可能正在寻找替代。假设您可以创建一个单元格数组,其中每个单元格包含一个向量(长度不等于所有其他单元格),然后使用arrayfun、cellfun、accumdim/accumarray等(取决于您尝试执行的确切操作)跨单元格执行聚合操作。

请分享有关您遇到的错误的更多详细信息,这将有助于社区了解您的用例并分享相关解决方案。请随时参考StackOverflow问答指南:
for k=1:6
    gate_values_k(:,1) = nonzeros( gate_values(:,1) );