2014-09-10 36 views
0

我編寫了一個代碼,它將矩陣中的非數字值替換爲某個數字。 現在,爲了測試它,我想允許MATLAB接受非數字條目。在MATLAB中允許矩陣中的非數字條目

我的代碼開始與提示: matrix_input = input('Please enter the matrix: x=');

如果我輸入類似[1,2,3; 4,5 ,?],MATLAB給出一個錯誤:非平衡或意外的括號或支架。由於所有括號似乎均衡,我認爲這是由於非數字輸入。是否有可能讓MATLAB允許非數字輸入?

+1

在那裏使用'NaN'來代替那些非數字條目? – Divakar 2014-09-10 11:20:36

+0

@Divakar,我已經有了一個編碼替換的代碼。我的問題是我無法在非數字輸入的矩陣上測試它。我也不知道用什麼字符來測試我的代碼性能:或許是'?'或者可能是其他東西 – user3349993 2014-09-10 11:23:58

+0

嘗試使用單元而不是矩陣。你可以把任何東西放在一個單元格中。 ''c = {1,2,3; 4,5,'?'}''。從那裏你可以做替換,並用''m = cell2mat(c)''得到一個矩陣。 – Nras 2014-09-10 11:26:17

回答

4

您需要一個cell array。單元陣列的每個單元可以容納任何類型的數據。大括號用於創建一個單元陣列像這樣:

cell_array = {1, 2, 3; '4', '?', 6}; 

如果使用正則括號中的單元陣列訪問一個元素你會得到一個細胞。如果你使用花括號,你會得到單元格的內容。正是這種差異往往會讓人們用細胞陣列趕出來。

cell_array(1) % Returns a 1x1 cell containing the value 1. 
cell_array{1} % Returns 1 

編輯

出於好奇,什麼是您使用的代碼替換非數值?對於一個單元陣列,我想出了機智如下:

idx = cellfun(@isnumeric, cell_array); 
cell_array(~idx) = {NaN}; 
matrix = cell2mat(cell_array); 

正如在評論中提到,你也可以使用結構數組:

struct_array = struct('v', {1, 2, 3; '4', '?', 6}); 

這將創建結構數組,其中外地v包含該值。但是,我無法想象一個簡潔的方法來在一分鐘內完成更換。

+0

您可以添加結構數組作爲可能的解決方案。結構通常比細胞表現更好。 – sobek 2014-09-10 11:47:19

+0

@sobek你確定嗎? – excaza 2014-09-10 12:06:02

+0

不確定關於數組的結構,但我確信單元對比常見結構有明顯的性能劣勢。 – sobek 2014-09-10 12:25:06