我創建細胞完全字符串變量的:使用單元格的內容作爲變量名
X{1,1} = 'TEST1A1'
X{2,1} = 'TEST1A2'
X{3,1} = 'TEST1A3'
...
X{120,1} = 'TEST8C5'
他們各自代表的實驗數據集。我創建了一組包含該數據的3Dmatrix,如果我可以將這些字符串用作變量名稱,那將是非常好的。
將函數句柄作爲解決方案嗎?我從來沒有真正使用過它們。
我創建細胞完全字符串變量的:使用單元格的內容作爲變量名
X{1,1} = 'TEST1A1'
X{2,1} = 'TEST1A2'
X{3,1} = 'TEST1A3'
...
X{120,1} = 'TEST8C5'
他們各自代表的實驗數據集。我創建了一組包含該數據的3Dmatrix,如果我可以將這些字符串用作變量名稱,那將是非常好的。
將函數句柄作爲解決方案嗎?我從來沒有真正使用過它們。
一種選擇是使用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>>']);
這看起來很美,我的第一次測試運行清楚地表明它可以工作。我會將它標記爲正確的答案,如果解決方案我正在尋找這種類型。 – 2014-11-03 14:44:57
@KrystianMeresiński謝謝。我強烈推薦[Loren的博客](http://blogs.mathworks.com/loren/)。她經常發佈有用的技巧。 – gire 2014-11-03 14:48:13
難道你不能只是索引到該3D矩陣相應的,並避免創建這麼多的變量,這也會混亂你的工作區? – Divakar 2014-11-03 14:16:33
一個3D矩陣已經是4096x2x64的位置,我有125組數據。我相信這是可以做到的,但我也想知道如果需要,指定變量名稱的最佳方法是什麼。更不用說我不得不做一些功能來使它工作。 – 2014-11-03 14:24:01
將其擴展到「4096 x 2 x 64 x 125」的4D矩陣,並將其索引到第四維中以選擇任何數據集。對我而言,這將是處理這種數據的最優雅和有效的方式。 – Divakar 2014-11-03 14:26:05