我有一个数组:
Data = [10 20 30 50 40 60 NaN NaN 70 80; 1 2 3 4 5 6 7 8 9 10];
第一行代表数据,第二行包含第一行的索引。
我想按降序排列第一行,但使用正确的索引。
因此,我的输出应该像
N_Data = [80 70 60 50 40 30 20 10 NaN NaN; 10 9 6 4 5 3 2 1 8 7];
我并不关心NaNs
所以可以从数组中删除它们N_Data
答案 0 :(得分:3)
您可以按默认升序对数据的否定进行排序,这会自动将NaN
值放在最后。然后,您可以否定结果以获取原始值
result = -sortrows(-Data.').'
% 80 70 60 50 40 30 20 10 NaN NaN
% 10 9 6 4 5 3 2 1 8 7
如果您想删除NaN
值
result = result(:, any(isnan(result), 1));
答案 1 :(得分:2)
在这里,您可以找到两个选项,灵感来自适用于您的案例的this answers:
public class Main
{
public void Load_Condensed()
{
condensed1.Load(Paths[0]);
condensed2.Load(Paths[1]);
condensed3.Load(Paths[2]);
condensed4.Load(Paths[3]);
condensed5.Load(Paths[4]);
condensed6.Load(Paths[5]);
}
private void exportToolStripMenuItem_Click(object sender, EventArgs e)
{
List<Condensed> Pokemon = new List<Condensed>
{
condensed1.Export(),
condensed2.Export(),
condensed3.Export(),
condensed4.Export(), //Loads all of the data from calling Export()
condensed5.Export(),
condensed6.Export()
};
Export(Condensed); //Sends the data
}
}
Paths[]
如果您不关心NaN,可以将选项缩短为:
%// Option 1
Data = [10 20 30 50 40 60 NaN NaN 70 80; 1 2 3 4 5 6 7 8 9 10]
Data(isnan(Data)) = -Inf;
N_Data = sortrows(Data.',-1).'
N_Data(isinf(N_Data)) = NaN
%// Option 2
Data = [10 20 30 50 40 60 NaN NaN 70 80; 1 2 3 4 5 6 7 8 9 10]
[sortedData, sortedIndices] = sort(Data(1,:),'descend')
N_Data = [sortedData; sortedIndices]
mask = isnan(sortedData)
N_Data = [ N_Data( :,~mask), N_Data( :, mask) ]
说明:
N_Data =
80 70 60 50 40 30 20 10 NaN NaN
10 9 6 4 5 3 2 1 7 8
%// Option 1
Data(isnan(Data)) = -Inf;
N_Data = sortrows(Data.',-1).'
N_Data(:,isinf(N_Data(1,:))) = []
%// Option 2
[sortedData, sortedIndices] = sort(Data(1,:),'descend')
N_Data = [sortedData; sortedIndices]
N_Data = N_Data( :,~isnan(sortedData) )
答案 2 :(得分:1)
尝试使用sortrows(Data.',-1).'
。
它对行进行排序,您希望对列进行排序,因此.'
。 -1
选项用于降序。