2013-11-14 146 views
1

我有一個矩陣附加一個矢量到矩陣

DataSet(1000,400) 

我希望每一行復制到最初聲明爲

FinalDataSet=[] 

我跟着用於複製規則是如下的最終矩陣基於用戶輸入

For any row i in "DataSet" 
     if user enters a character X 
      Add to FinalDataSet the vector (X,All Elements of DataSet(i)) 
     else do nothing 

我爲以上代碼實現了以下代碼

n=size(DataSet,1); 
for i=1:n 
    element=inputdlg('Enter Character'); 
    if(~isempty(element)) 
      FinalDataSet=[FinalDataSet;[element DataSet(i,:)]]; 
    end 
end 

(輸入對話框,我觀察到返回[]如果按下取消)

然而,當我執行上述代碼 FinalDataSet具有以下形式

'H' [1x400 double] 
'g' [1x400 double] 
'i' [1x400 double] 

什麼問題這裏?是因爲我試圖結合兩種不同類型的向量?我如何獲得(1000,401)維矩陣而不是(1000,2)矩陣?

我的感覺是我需要爲字符存儲相應的ASCII值或者爲用戶選擇完全管理一個單獨的矢量。但是,沒有上述兩種方法可能嗎?請幫忙!!

回答

1

我花了一些時間才意識到問題所在。你確實不能得到包含字母的矩陣。

,如果你真的想這樣,解決的辦法是一切在1000x401單元陣列簡單地存儲,像這樣:

c = ['H' num2cell(1:10)] 

但是,那麼你會放棄相當多的便利/效率您可以通過矩陣得到處理。

因此,我建議這種替代:

如果你的內容與存儲字符爲數字,這裏是你可以做什麼:

element = {'H'} % inputdlg returns a 1x1 cell 
i=1; 
DataSet = rand(1000,400); 

v = [element{1}+0 DataSet(i,:)] 

然後爲了看它是哪個字母,你可以使用char

char(v(1)) 
+0

那麼...這種解決我的目的..謝謝! 讓我們來看看是否有人有別的話要說.. :) – alphacentauri

0

另一種可能性是使用結構。您可以在結構名稱後添加字母以查找相應的數組。所有放置在結構中不同點的陣列的大小可能會有所不同,並且不必像您的那樣大小相同。這是它在你的代碼中實現:

n=size(DataSet,1); 
for i=1:n 
    element=inputdlg('Enter Character'); 

    if(~isempty(element)) 
     FinalDataSet.element=DataSet(i,:) 
    end 
end 

閱讀從結構中的數據通過調用相應的元素結構完成,讓我們用x爲例這裏。

xdata = FinalDataSet.x; 

你需要小心的是不使用元素兩次,因爲你會覆蓋以前的數據。或者,如果元素已經存在於數組中併發出警告,則執行測試。希望這可以幫助。