3

たとえば、配列があります。

a=[1:5 8:10];

次を使用して表示する場合:

disp(['a = ' num2str(a)]);

結果は次のようになります

a = 1 2 3 4 5 8 9 10

必要以上に長すぎます。Matlab を定義した方法と同じように、または同じように表示させるにはどうすればよいですか?

次のような「非公式」な方法で変数を定義した場合、より具体的に説明します。

a=[1:3 4:6 8:10]

(通常は 1:3 4:6 ではなく 1:6 にする必要があります)

私はMatlabにどちらかの方法で表示させたいだけです:

1:3 4:6 8:10    or    1:6 8:10

また、変数名または角括弧を表示するかどうかも気にしません。

検索しましたが、有用なものは見つかりませんでした。手動で解析することを検討していますが、賢い方法とは思えません。

どんな提案もとても役に立ちます、どうもありがとう。

4

3 に答える 3

5

これを行う唯一の方法は、必要な形式で配列を表示する独自の関数を作成することです。たとえば、配列の単調に増加する部分を凝縮して表示する場合は、次のような関数を使用できます。

function display_array(array)
    str = cellfun(@(n) {num2str(n)}, num2cell(array));
    index = (diff(array) == 1) & ([1 diff(array, 2)] == 0);
    str(index) = {':'};
    str = regexprep(sprintf(' %s', str{:}), '( :)+\s*', ':');
    disp([inputname(1) ' = [' str(2:end) ']']);
end

そして、あなたはそれをそのように使うでしょう:

>> a = [1:5 7 9:11]  %# Define a sample array

a =

     1     2     3     4     5     7     9    10    11     %# Default display

>> display_array(a)
a = [1:5 7 9:11]     %# Condensed display
>> b = [1 2 3 4 4 4 3 2 1];  %# Another sample array
>> display_array(b)
b = [1:4 4 4 3 2 1]  %# Note only the monotonically increasing part is replaced
于 2012-04-25T15:29:00.533 に答える
3

このために、Matlab ファイル交換のvec2strを使用します。例えば:

str = vec2str([1 3 5 5 9 8 7 6 5]) 
ans = 
    [1:2:5,5,9:-1:5] 

>> eval(str) 
ans = 
     1 3 5 5 9 8 7 6 5 
于 2012-04-25T15:37:55.237 に答える
0

不可能。Matlab は定義をすぐに破棄します。「オブジェクト」aには、その定義に関する知識がまったくありません。

于 2012-04-25T15:09:31.900 に答える