2014-11-03 74 views
1

我創建細胞完全字符串變量的:使用單元格的內容作爲變量名

X{1,1} = 'TEST1A1' 
X{2,1} = 'TEST1A2' 
X{3,1} = 'TEST1A3' 
... 
X{120,1} = 'TEST8C5' 

他們各自代表的實驗數據集。我創建了一組包含該數據的3Dmatrix,如果我可以將這些字符串用作變量名稱,那將是非常好的。

將函數句柄作爲解決方案嗎?我從來沒有真正使用過它們。

+1

難道你不能只是索引到該3D矩陣相應的,並避免創建這麼多的變量,這也會混亂你的工作區? – Divakar 2014-11-03 14:16:33

+0

一個3D矩陣已經是4096x2x64的位置,我有125組數據。我相信這是可以做到的,但我也想知道如果需要,指定變量名稱的最佳方法是什麼。更不用說我不得不做一些功能來使它工作。 – 2014-11-03 14:24:01

+2

將其擴展到「4096 x 2 x 64 x 125」的4D矩陣,並將其索引到第四維中以選擇任何數據集。對我而言,這將是處理這種數據的最優雅和有效的方式。 – Divakar 2014-11-03 14:26:05

回答

2

一種選擇是使用dynamic field names的結構。

填滿它:

X = {'test1', 'test2', 'test3', ...}; 
my_data = struct(); 

for t = 1:length(X) 
    my_data.(X{t}) = <<read test "t" from file or database function + parameters>> 
end 

你最終會像這樣的結構:

my_data.test1 % //(contains a 2d or 3d matrix for test 1) 
my_data.test2 % //(contains a 2d or 3d matrix for test 2) 
... 

要動態地看你做的一樣:

% // read only one member 
tmp = my_data.(X{2}) 

% // or read them sequentially 
for t = 1:length(X) 
    tmp = my_data.(X{t}) 

    % // do something with tmp 
end 

我肯定考慮動態字段的結構比使用eval函數的技巧更清潔:

eval([X{1}, ' = <<read test "1" from file or database function + parameters>>']); 
+0

這看起來很美,我的第一次測試運行清楚地表明它可以工作。我會將它標記爲正確的答案,如果解決方案我正在尋找這種類型。 – 2014-11-03 14:44:57

+0

@KrystianMeresiński謝謝。我強烈推薦[Loren的博客](http://blogs.mathworks.com/loren/)。她經常發佈有用的技巧。 – gire 2014-11-03 14:48:13

相關問題