我有一个像这样的matlab单元
BCLK103 4.000 5.112 7.055
BCLK105 5.000 5.112 7.255
BCLK109 4.050 5.112 7.152
BCLK103 4.000 5.112 7.555
BCLK109 7.000 5.112 7.545
BCLK105 4.060 6.12 8.555
BCLK103 4.600 6.182 9.55
BCLK109 4.900 6.142 8.545
我想要
BCLK103 4.000 5.102 7.055
BCLK103 4.100 5.112 7.555
BCLK103 4.600 6.182 9.55
BCLK105 5.000 5.112 7.255
BCLK105 4.060 6.12 8.555
BCLK109 4.050 5.112 7.152
BCLK109 7.000 5.112 7.545
BCLK109 4.900 6.142 8.545
我尝试使用
Str = sprintf('%s,', CellArray{:,:});
D = sscanf(Str, '%g,');
[dummy, index] = sort(D);
sortedCellArray = CellArray(index);
但是Matlab给出了
Warning: The argument for the %s format specifier must be of type char (a string).
有人请教我如何用第一列中最后一个数字(即103,105,109)的字符串(即BCLK103,BCLK105,BCLK109)重新排列这个单元格行的行吗?抱歉,我是matlab的新学员。
谢谢。
答案 0 :(得分:2)
你必须安排第一列,获取索引,然后你可以订购整个单元格,这里我只复制了前两列:
a =
'BCLK103' [ 4]
'BCLK105' [ 5]
'BCLK109' [4.0500]
'BCLK103' [ 4]
'BCLK109' [ 7]
'BCLK105' [4.0600]
'BCLK103' [4.6000]
'BCLK109' [4.9000]
获取索引:
[~,ind_sort]=sort(a(:,1));
使用a(ind_sort,:)
'BCLK103' [ 4]
'BCLK103' [ 4]
'BCLK103' [4.6000]
'BCLK105' [ 5]
'BCLK105' [4.0600]
'BCLK109' [4.0500]
'BCLK109' [ 7]
'BCLK109' [4.9000]
Matlab不允许您使用sort
排列整个单元格,因为它在所有单元格中都需要相同的数据类型,并且只有第一列有字符串。
答案 1 :(得分:1)
假设第一列始终具有示例中的结构(相同的字母后跟固定的数字位数),您可以使用sortrows
:
x = {'BCLK103' 4.000 5.112 7.055
'BCLK105' 5.000 5.112 7.255
'BCLK109' 4.050 5.112 7.152
'BCLK103' 4.000 5.112 7.555
'BCLK109' 7.000 5.112 7.545
'BCLK105' 4.060 6.12 8.555
'BCLK103' 4.600 6.182 9.55
'BCLK109' 4.900 6.142 8.545}; % data
y = sortrows(x,1); % sort rows based on first column
这给出了
y =
'BCLK103' [ 4] [5.1120] [7.0550]
'BCLK103' [ 4] [5.1120] [7.5550]
'BCLK103' [4.6000] [6.1820] [9.5500]
'BCLK105' [ 5] [5.1120] [7.2550]
'BCLK105' [4.0600] [6.1200] [8.5550]
'BCLK109' [4.0500] [5.1120] [7.1520]
'BCLK109' [ 7] [5.1120] [7.5450]
'BCLK109' [4.9000] [6.1420] [8.5450]