按其一列(数字)对混合的文本数字矩阵(单元格数组)进行排序

时间:2019-05-01 11:42:27

标签: matlab

我有一个Excel电子表格,我希望其行随机洗牌并在Matlab中进一步使用。为此,我正在将XLS读入单元格数组,将随机数生成到一列中,然后按该列进行排序。但是,由于变量类型冲突,这被证明是有问题的。我使用的代码是:

[num, txt, M] = xlsread(fileName);
for row=2:row_N % generate random numbers in the D column
    M(row,4) = num2cell(rand);
end
M = sortrows(M,4);

这导致我的矩阵看起来像这样:

enter image description here

由于D列包含数字,而其他列中有文本,因此无法进行排序(它说“单元格元素必须是字符数组。”)。

我尝试了在数字变量和单元格变量之间进行各种转换,还尝试使用'readtable'而不是'xlsread'-但始终存在问题,以至于我无法解决此冲突。有什么建议么?使用Matlab 2016a。

1 个答案:

答案 0 :(得分:1)

如果我了解您的目标,那么我认为它可以实现。您可能会从importdata获得不同的字段名称,并且将不得不更改这些字段名称,但是假设您没有这样做,则应该将其覆盖。

% import the data
impdata=importdata('temp.xlsx');

% get rid of the headers
oldcellarray=impdata.textdata(2:end,:);

%resort the rows in a random order
newcellarray=oldcellarray(randperm(size(oldcellarray,1)),:);