matlab多维数组转excel
matlab multidimensional array to excel
我有一个 Matlab 脚本,输出大小为 16:12:34 的多维数组 LCOE(3 维)。此输出需要写入 Excel,因此我使用 xlswrite。
我试过这个:
T = LCOE(:,:,1);
xlswrite('filename', T, 'sheetname', 'B2');
这做了它应该做的,但只写了一个 table 到 excel,我想把所有 34 个 table 写到每个下面的 excel其他,间隔 `2 个空白行。
然后,我尝试了这个:
for y = 1:34
T = LCOE(:,:,y)
xlswrite('filename', T, 'sheetname', strcat('B', num2str(2+(y-1)*18)));
这有效,但速度很慢,因为 matlab 将每个 table 分别写入 excel。有更快的方法吗?
而不是一次又一次地使用 xlswrite
。将 3D 矩阵的所有值转储到 2D 矩阵并添加 NaN
行,这样当您将其写入 excel 文件时,您会得到 2 个空白行。
以下代码将执行时间缩短了 10 倍以上。
LCOE = 100*rand(16,12,34); % Taking random values for LCOE
T = NaN(18*34-2 ,12); % 1. Pre-allocation 2. 16+2 = 18
% Following loop dumps all the values of 3D matrix into a 2-D followed by 2 rows of NaN
% to leave 2 blank rows in excel file.
for k = 1:34
T(18*(k-1)+[1:16], :) = LCOE(:,:,k);
end
xlswrite('filename', T, 'sheetname', 'B2'); % Writing the Excel file
在我的系统中,我的代码执行大约需要 1 秒,而您的代码大约需要 10.5 秒。所以这是一个显着的差异。
我有一个 Matlab 脚本,输出大小为 16:12:34 的多维数组 LCOE(3 维)。此输出需要写入 Excel,因此我使用 xlswrite。
我试过这个:
T = LCOE(:,:,1);
xlswrite('filename', T, 'sheetname', 'B2');
这做了它应该做的,但只写了一个 table 到 excel,我想把所有 34 个 table 写到每个下面的 excel其他,间隔 `2 个空白行。
然后,我尝试了这个:
for y = 1:34
T = LCOE(:,:,y)
xlswrite('filename', T, 'sheetname', strcat('B', num2str(2+(y-1)*18)));
这有效,但速度很慢,因为 matlab 将每个 table 分别写入 excel。有更快的方法吗?
而不是一次又一次地使用 xlswrite
。将 3D 矩阵的所有值转储到 2D 矩阵并添加 NaN
行,这样当您将其写入 excel 文件时,您会得到 2 个空白行。
以下代码将执行时间缩短了 10 倍以上。
LCOE = 100*rand(16,12,34); % Taking random values for LCOE
T = NaN(18*34-2 ,12); % 1. Pre-allocation 2. 16+2 = 18
% Following loop dumps all the values of 3D matrix into a 2-D followed by 2 rows of NaN
% to leave 2 blank rows in excel file.
for k = 1:34
T(18*(k-1)+[1:16], :) = LCOE(:,:,k);
end
xlswrite('filename', T, 'sheetname', 'B2'); % Writing the Excel file
在我的系统中,我的代码执行大约需要 1 秒,而您的代码大约需要 10.5 秒。所以这是一个显着的差异。