读取电子表格,每个像元具有2个值,作为(n,j,2)矩阵

时间:2019-05-09 12:30:22

标签: matlab xlsread

我已经使用xlsread来读取电子表格作为二维矩阵,但是我需要读取电子表格的形式

2,2    2,0
0,2    1,1

作为2、2、2矩阵

是否可以使用Matlab分隔单元格的值,还是必须在电子表格中使用两个单独的矩阵

1 个答案:

答案 0 :(得分:1)

如果电子表格中的数据是每个单元格一个数字,则只需将数据导入2D数组即可。命令'reshape'可以改变数组的维数,但是有时候让事情以您想要的方式重新排序有些棘手。该代码将采用大小为Rx(2C)的2D向量M,并将其转换为大小为[R C 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