我是MATLAB
的新人。感谢您的帮助:
我有600 x 4
矩阵,其值介于0 and 1.
例如:
*0.1 0.2 0.3 0.4
0.2 0.3 0.4 0.1
0.3 0.4 0.1 0.2
0.4 0.2 0.3 0.1*
我需要使用每列的名称标记元素,类似于:
*test1(0.1) test2(0.2) test3(0.3) test4(0.4)
test1(0.2) test2(0.3) test3(0.4) test4(0.1)
test1(0.3) test2(0.4) test3(0.1) test4(0.2)
test1(0.4) test2(0.2) test3(0.3) test4(0.1)*
并且仍然可以按降序对每列的值进行排序以获得此值:
*test1(0.1) test2(0.2) test3(0.3) test4(0.4)
test4(0.1) test1(0.2) test2(0.3) test3(0.4)
test3(0.1) test4(0.2) test1(0.3) test2(0.4)
test4(0.1) test2(0.2) test3(0.3) test1(0.4)*
我需要使用值显示标签,任何格式:A(0.1), A/0.1, A-0.1
等
答案 0 :(得分:0)
首先,对数字进行排序比对字母排序更容易。要对数字数组进行排序,您可以执行以下操作
A = [ ... ]; % define the matrix
A = sort(A,2,'ascend'); % sort A along the 2nd dimension of the matrix (the row) in ascending order
您可以通过向函数sort
添加第二个输出来记录排序排列的索引。
[A,I] = sort(A,2,'ascend');
因此矩阵I
包含将未排序矩阵映射到排序矩阵的配方。您可以使用相同的大小来置换其他矩阵中的元素,以使其与矩阵A
完全相同。例如
B = [ ... ]; % define a new matrix with the same size as A
B = B(I);
使用此方法,我们还可以对字符串单元格执行相同的排列。例如
C = { ... }; % define a cell of strings with the same size as A
C = C(I);
因此,让我们为您的问题创建字符串单元格。首先,我们需要一个带数字并返回格式化字符串的函数。内置功能可用于完成简单的工作。这是sprintf
。例如
sprintf('Hello(%.1f)',.4)
将返回一个字符串
Hello(0.4)
要将转换应用于矩阵A中每个元素的字符串,您可以执行以下操作:
C = arrayfun(@(x)sprintf('Hello(%.1f)',x),A,'UniformOutput',false);
单元格数组C
包含A
中每个元素的格式化字符串。在您的问题中,您需要一种更复杂的方法来根据元素所在的列来不同地格式化字符串。您可以创建在自定义.m文件中定义的新函数来执行此任务。
无论如何,假设已经完成,最后要对单元格C
进行排序,您只需输入:
C = C(I);
这就是全部。