我正在逐列对矩阵应用转换,但问题是这种转换不会平等地影响每一列,从而给我留下了不同长度的列的集合。我想进一步遍历这些专栏,但是找不到在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来实现此目的)。谢谢。
答案 0 :(得分:1)
数字数组通常不允许您使用不同长度的列。显然,如果您的按列操作涉及到该操作的“零元素”,则只需用该零元素填充列即可。
否则,您可能正在寻找'cell arrays'。大概您可以创建一个单元格数组,其中每个单元格都包含一个矢量(长度与其他所有单元格不相等),然后使用诸如arrayfun,cellfun,accumdim / accumarray等之类的东西(取决于您要执行的确切操作)在单元之间执行聚合操作。