从多维数组传递到电子表格

时间:2015-10-06 22:08:44

标签: excel matlab matrix multidimensional-array

我有一个多维数组,其格式为:

Multi dimensional array with 5 rows and variable number of columns

其中每一行代表一张纸,每列代表一种变量。

我想要做的是将数据导出到电子表格中,其中每一行都存储在带有列的工作表中。 (也许可以更容易地将sim多维数组分成五个矩阵,然后将它们一起导出到电子表格中)但我不知道它是否是最有效的方式。

以下是电子表格的图片:

5 sheets with variable numbers of columns

下面是我的代码,它基本上从Excel中读取工作表,并为每种类型的数据模拟1,000个案例:

sim={};
for k = 1 : 5
sheet = xlsread('CB.xlsx', k);
[m, n] = size(sheet)
for i = 1 : n
[f,x] = ecdf(sheet(:,[i]));
[f, dup] = unique(f);
x = x(dup);
randomValues = rand(1, 1000);
sim{k,i} = round(interp1(f,x, randomValues));
end
end

尝试使用Mikhail_Sam'answer我遇到了以下问题:

`sheet = 1
for i = 1:5
for j = 1:5
xlswrite('filename.xls',sim(:,i,j),sheet,strcat(char(64+j),int2str(1)))
end
sheet = sheet+1;
 end`

但它说“索引超出矩阵维度”,然后我尝试了这段代码     sheet = 1 for i = 1:5 for j = 1:size(sheet) xlswrite('filename2.xls',sim{i,j},sheet,'A1:E1000'); end sheet = sheet+1; end 此代码写入5张文件,但它填充了多维数组每行的前5个数字。然后我尝试应用num2cell并运行您的代码,但它再次给出“索引超过矩阵维度”

2 个答案:

答案 0 :(得分:1)

我不知道“最有效的方式”,但我是这样做的: 例如,我创建3x3x3矩阵并尝试将其写入excel:

sheet = 1
for i = 1:3
for j = 1:3
xlswrite(filename,x(:,i,j),sheet,strcat(char(64+j),int2str(1)));
end
sheet = sheet+1;
end

我得到你想要的东西 - 3张,行数据。 在您的尺寸上更换3。但我有一个弱点 - 我不记得多维数组中的数字机制 - i是你的例子中的一行,或j ...无论如何它的工作只是看看数据和如有必要,请替换i - j - :

希望,这有助于:)

答案 1 :(得分:1)

最后,我弄清楚如何从多维数组传递到每个电子表格。我决定将数据排列在同一个多维数组中,然后使用A{k}=transpose(vertcat(simulado{k,:}))将数据传递给spreadhe,然后应用for循环将数据分别添加到每个工作表中。

 sheet = 1
 for i = 1:5
 xlswrite('filename.xls',A{1,i},sheet);
 sheet = sheet+1;
 end`