我有一个多维数组,其格式为:
其中每一行代表一张纸,每列代表一种变量。
我想要做的是将数据导出到电子表格中,其中每一行都存储在带有列的工作表中。 (也许可以更容易地将sim
多维数组分成五个矩阵,然后将它们一起导出到电子表格中)但我不知道它是否是最有效的方式。
以下是电子表格的图片:
下面是我的代码,它基本上从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
并运行您的代码,但它再次给出“索引超过矩阵维度”
答案 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`