我使用 xlsread 将电子表格作为二维矩阵读取,但我需要以以下形式读取电子表格
2,2 2,0
0,2 1,1
作为 2,2,2 矩阵
有没有办法使用 Matlab 来分隔单元格的值,或者我必须在电子表格中使用两个单独的矩阵
如果电子表格中的数据是每个单元格一个数字,只需将数据导入二维数组即可。命令“reshape”可以改变数组的维数,但有时让事物按照你想要的方式重新排序有点棘手。此代码将采用大小为 Rx(2C) 的 2D 向量 M 并将其转换为大小为 [RC 2] 的 3D 数据块,在原始行中交替页面。很难用你的数字来判断它是否有效,所以我使用了一个更容易跟踪的不同集合。
M = [1 2 3 4
5 6 7 8];
M = reshape(M,[size(M,1) 2 size(M,2)/2]);
M = permute(M,[1 3 2])
结果是:
M(:,:,1) =
1 3
5 7
M(:,:,2) =
2 4
6 8
如果电子表格中的数据每个单元格有两个以逗号分隔的值(如评论中所建议的那样),它将作为一系列单元格数组导入 MATLAB。考虑一个包含 4 个单元格 (2x2) 的电子表格,其中包含以下数据:
[ 1,2 ][ 3,4 ]
[ 5,6 ][ 7,8 ]
在 MATLAB 中,我们可以使用
[~,TXT]=xlsread('filename.xlsx');
变量 TXT 将是:
TXT =
2×2 cell array
{'1,2'} {'3,4' }
{'5,6'} {'7,8'}
对细胞进行手术是一种痛苦。我想不出没有“for”循环的方法,但是一旦你这样做了,分配给第三维就很容易了。
M = zeros([size(TXT,1) size(TXT,2) 2]);
for ii = 1:size(TXT,1)
for jj = 1:size(TXT,2)
temp = sscanf(char(TXT(ii,jj)),'%f,%f');
M(ii,jj,:) = reshape(temp,[1 1 2]);
end
end
对于上面的值
M(:,:,1) =
1 3
5 7
M(:,:,2) =
2 4
6 8