2016-03-10 66 views
0

使用Matlab,我想要顯示以下21x4向量數據的第1列和第3列第2列和第3列第4列和第3列之間的差異,並將結果顯示在21x3向量中。將向量的輸出顯示到向量中

請任何人都可以協助?

-48.0000 -46.0000 -38.0000 -39.0000

-51.0000 -49.3333 -41.5218 -48.0000

-49.0000 -51.6667 -44.0206 -49.0000

-55.0000 -53.3333 -45.9588 -49.0000

-56.0000 -54.3333 -47.5424 -52.0000

-52.0000 -53.6667 -48.8814 -52.0000

-53.0000 -51.0000 -50.0412 -48.0000

-48.0000 -51.6667 -51.0643 -48.0000

-54.0000 -52.0000 -51.9794 -48.0000

-54.0000 -52.6667 -52.8073 -50.0000

-50.0000 -52.3333 -53.5630 -50.0000

-53.0000 -54.3333 -54.2583 -50.0000

-60.0000 -54.6667 -54.9020 -51.0000

-51.0000 -54.0000 -55.5012 -51.0000

-51.0000 -51.6667 -56.0618 -51.0000

-53.0000 -52.3333 -56.5884 -51.0000

- 53.0000 -55.6667 -57.0849 -53.0000

-61.0000 -58.6667 -57.5545 -53.0000

-62.0000 -61.0000 -58.0000 -60.000 0

-60.0000 -60.0000 -58.4238 -58.0000

-58.0000 -59.6667 -58.8279 -58.0000

回答

1

首先第一件事情,保存你的價值觀到一個變量,如:

var = [... 
-48.0000 -46.0000 -38.0000 -39.0000 
-51.0000 -49.3333 -41.5218 -48.0000 
-49.0000 -51.6667 -44.0206 -49.0000 
-55.0000 -53.3333 -45.9588 -49.0000 
-56.0000 -54.3333 -47.5424 -52.0000 
-52.0000 -53.6667 -48.8814 -52.0000 
-53.0000 -51.0000 -50.0412 -48.0000 
-48.0000 -51.6667 -51.0643 -48.0000 
-54.0000 -52.0000 -51.9794 -48.0000 
-54.0000 -52.6667 -52.8073 -50.0000 
-50.0000 -52.3333 -53.5630 -50.0000 
-53.0000 -54.3333 -54.2583 -50.0000 
-60.0000 -54.6667 -54.9020 -51.0000 
-51.0000 -54.0000 -55.5012 -51.0000 
-51.0000 -51.6667 -56.0618 -51.0000 
-53.0000 -52.3333 -56.5884 -51.0000 
-53.0000 -55.6667 -57.0849 -53.0000 
-61.0000 -58.6667 -57.5545 -53.0000 
-62.0000 -61.0000 -58.0000 -60.0000 
-60.0000 -60.0000 -58.4238 -58.0000 
-58.0000 -59.6667 -58.8279 -58.0000 ]; 

其次,可以通過VAR的第一個參數訪問的列,並使用特殊字符「:」選擇所有的行值;那就是:

VAR(:,1)將在列中選擇所有值1.

var(:,1)-var(:,2) 

會給你這兩列之間的區別。

你可以解決其餘問題。

你可能輸出可以更簡單地顯示爲:

output = [var(:,1)-var(:,3) var(:,2)-var(:,3) var(:,4)-var(:,3)] 
+0

'var(:,[1 2 4]) - var(:,3)'應該做同樣的事情,對吧? – beaker

+0

@beaker在八度是;-) –

+0

@LuisMendo哎呀...這不起作用在MATLAB? :-o – beaker

1

第x列和第y列之間的差異,可以實現如下:

disp(myMatrix(:,x)-myMatrix(:,y)); 

disp()功能實際上只是一個屏幕上打印功能,該代碼的核心依賴於myMatrix括號內的內容:冒號運算符:的意思是全部都是所以回想一下,圓括號中的第一個索引標識行,而第二個索引標識列,說myMatrix(:,x)表示「返回myMatrix的所有行和第x列」。

因此,在特定情況下:

  • 列1和3之間的差異
  • 2列和第3
  • 4列和3

之間差可以實現(之間差分別爲)

myMatrix(:,1)-myMatrix(:,3) 
myMatrix(:,2)-myMatrix(:,3) 
myMatrix(:,4)-myMatrix(:,3) 

其中myMatrix顯然是你的21x4矩陣。

如果你想在一個矩陣來連接這些值,這很容易被簡單數組拼接完成:

myOutput=[myMatrix(:,1)-myMatrix(:,3) , myMatrix(:,2)-myMatrix(:,3) , myMatrix(:,4)-myMatrix(:,3)]; 

,其中每個結果列將在myOutput列。最後,您還可以顯示整個myOutput矩陣,這要歸功於disp()命令。

+0

謝謝。你們是最棒的! – Kola

1

要計算相對於給定列的差異,你可以使用bsxfun如下:

x = [-48.0000 -46.0000 -38.0000 -39.0000 
    -51.0000 -49.3333 -41.5218 -48.0000 
    -49.0000 -51.6667 -44.0206 -49.0000 
    -55.0000 -53.3333 -45.9588 -49.0000 
    -56.0000 -54.3333 -47.5424 -52.0000]; %// data 
c = 3; %// index of reference column 
y = bsxfun(@minus, x(:, [1:c-1 c+1:end]), x(:,c)); 

這給

y = 
    -10.0000 -8.0000 -1.0000 
    -9.4782 -7.8115 -6.4782 
    -4.9794 -7.6461 -4.9794 
    -9.0412 -7.3745 -3.0412 
    -8.4576 -6.7909 -4.4576 
+0

謝謝。你們是最棒的! – Kola