什麼是有效的方式來填充一個單元格數組與矢量的值(每個格式不同)。MATLAB:填充單元陣列和格式編號
例如:
V = [12.3 .004 3 4.222];
期望電池陣列:
array = {'A = 12.30' 'B = 0.004' 'C = 3' 'D = 4'};
難道還有比呼籲sprintf
爲每一個細胞更簡單的方法?
array = {sprintf('A = %.2f',V(1)) sprintf('B = %.3f',V(2)) ... }
什麼是有效的方式來填充一個單元格數組與矢量的值(每個格式不同)。MATLAB:填充單元陣列和格式編號
例如:
V = [12.3 .004 3 4.222];
期望電池陣列:
array = {'A = 12.30' 'B = 0.004' 'C = 3' 'D = 4'};
難道還有比呼籲sprintf
爲每一個細胞更簡單的方法?
array = {sprintf('A = %.2f',V(1)) sprintf('B = %.3f',V(2)) ... }
還有的sprintf
沒有量化的形式,支持不同的格式,所以你大多隻能和每單元sprintf
電話。但是你可以安排代碼在循環中更容易處理。
V = [12.3 .004 3 4.222];
names = num2cell('A':'Z');
formats = { '%.2f' '%.3f' '%d' '%.0f' };
c = cell(size(V));
for i = numel(V)
c{i} = sprintf(['%s = ' formats{i}], names{i}, V(i));
end
這將是棘手的事情不是用簡單的方式更快,而不下降到Java或C,因爲它仍然要採取sprintf()
呼籲每個細胞,這是怎麼回事主宰的執行時間。
如果您有大量元素和相對較少的格式,可以使用unique()將它們分組爲一個格式的sprintf()調用,使用向量化版本的sprintf,然後分割一個分隔符來獲取單個字符串。這可能會也可能不會更快,這取決於您的確切數據集和實施。
或者您可以編寫一個MEX文件,將循環壓入C中,循環調用C的sprintf。一旦你達到中等大的輸入尺寸,這會更快。
這是可以做到如下:
V = [12.3 .004 3 4.222];
names = {'A', 'B', 'C', 'D'};
array = strcat(names(:), ' = ', ...
strtrim(mat2cell(num2str(V(:), '%.4f'), ones(1,numel(V))))).';
如何工作的:
num2str
給出一個字符矩陣,使用格式說明符(你可能要改變我以前的一個)。mat2cell
將其轉換爲單元格數組,將每行放入單元格中。strtrim
刪除空格。strcat
連接單元格。
我總是忘記'strtrim'。很有用! – chappjc 2014-12-02 01:27:00