毎回可変数の値を出力するループがあります.fprintf関数を使用してこれらの値を出力し、各行に16個の値のみが含まれるようにします. ループは毎回異なる数の値を出力するため、値の数はわかりません。これを行うためのアイデアはありますか?? どうもありがとう
質問する
5235 次
3 に答える
1
入力変数のデータ型や出力したい型がわからないので、これは単なる例です。
a = ones(1,20); % 20 input values
fprintf('%d',a(1:min(numel(a),16)))
>> 1111111111111111
a = ones(1,10); % 10 input values
fprintf('%d',a(1:min(numel(a),16)))
>> 1111111111
上記は最大 16 個の値を出力し、入力a
が空の場合でも機能します。問題は、入力の要素が 16 未満の場合にデフォルト値を出力するかどうかです。その場合、次の方法があります。
a = ones(1,10); % 10 input values
default = 0; % Default value if numel(a) < 16
fprintf('%d',[a(1:min(numel(a),16)) default(ones(1,max(16-numel(a),0)))])
>> 1111111111000000
列ベクトルがある場合は、これらを調整する必要があります。
編集:
@Schorschによって提起された質問に対処するために、16を超える値を持つ配列内の要素をクリッピングする代わりに、次の行にそれらを出力したい場合、これで行うことができます:
a = ones(1,20); % 20 input values
default = 0; % Default value if numel(a) < 16
fprintf('%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n',[a default(ones(1,16-mod(numel(a),16)))])
>> 1111111111111111
1111000000000000
もちろん、最初に示した 2 つのソリューションの代わりにフォームのバリアントを使用することもできますが、印刷文字列は読みにくくなる可能性があります。
于 2013-05-28T18:40:34.370 に答える