2012-04-25 27 views
3

例如,我有一個數組:如何以更好的方式在Matlab中顯示序列號?

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:6而不是1:3 4:6)

我剛希望Matlab以任何一種方式顯示:

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

我也不在乎它是否顯示變量名或方括號。

已搜索但沒有找到任何有用的東西。考慮手動解析它,但聽起來不像一個聰明的方式。

任何建議將是非常有益的,非常感謝。

回答

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 
+0

不可思議!非常感謝!我試圖理解你的代碼,因爲我對Matlab比較新,所以你使用的許多函數都不熟悉,比如cellfun,regexprep。無論如何,大拇指你的驚人答案。再次感謝! – 2012-04-25 16:09:02

0

不可能。 Matlab很快就拋棄了你的定義。 「對象」a完全不知道該定義。

+0

感謝您的意見。我想知道是否有任何內置函數「格式化」輸出。 – 2012-04-25 16:06:20

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 
+0

好找。我知道以前一定有人做過這樣的事情。 – gnovice 2012-04-25 15:40:51

+0

試過了,我的Matlab報告: 未定義的函數'vec2str'輸入參數的類型'雙'。 – 2012-04-25 16:02:03

+0

更新:我試過幫助vec2str,它說沒有找到函數。這個函數應該包含哪個包?我在Mac OS X上運行R2011b,不知道我是否安裝了足夠的軟件包。 – 2012-04-25 16:04:31

相關問題