如何解决.mat文件排序?

时间:2014-07-24 15:29:04

标签: matlab

我有三个.mat文件,A.mat,B.mat和C.mat。并且.mat文件的内容如下所示: ![在此输入图像说明] [1]

它是r2 = [rs2,cs2,sortedValues2]格式。我怎样才能对三者中的rs2(例如,3468,3909 ......)进行排序 .mat文件在一起递增,并计算rs2每个元素的出现次数? 任何人都可以给我任何建议吗?

2 个答案:

答案 0 :(得分:1)

原始

首先,您需要加载每个文件r2,然后将它的rs(1,:)值拉出到列向量中,然后对该列向量进行排序。获得向量后,使用逻辑索引来确定每个元素重复的次数。最后,将这些牵引柱连接在一起,将每个元件连接到它的相应计数上。输出向量将有重复的行,但我认为这不是一个问题。

allData = [load('A.mat',r2); load('B.mat',r2)l; load('C.mat',r2)];
colVector = allData(:, 1);
sortedVec = sort(colVector);

countVec = zeros(size(sortedVec));
for ii = 1:length(sortedVec)
    countVec(ii) = sum(sortedVec==sortedVec(ii));
end

outputVec = [sortedVec, countVec]

修改

由于您编辑的问题很简单,几乎与原始问题相同,我将在此处回答。大多数代码是相同的,您只需要从单元格数据而不是文件中获取数据。像这样:

colVector = [yourCellArray{:}];
sortedVec = sort(colVector);

countVec = zeros(size(sortedVec));
for ii = 1:length(sortedVec)
    countVec(ii) = sum(sortedVec==sortedVec(ii));
end

outputVec = [sortedVec, countVec]

答案 1 :(得分:0)

load A
rs2_1 = r2(:,1);
clearvars r2
load B
rs2_2 = r2(:,1);
clearvars r2
load C
rs2_3 = r2(:,1);
clearvars r2

% to combine
rs2_combined = [rs2_1;rs2_2;rs2_3];
% to sort
rs2_sorted = sort(rs2_combined);
% to count for appearance
rs2_count = hist(rs2_combined, min(rs2_combined):1:max(rs2_combined));

编辑:使用单元格数组

% recreate your situation
R = cell(11,10);
R = cellfun(@(x) [randi(3000,50,1),ones(50,1),ones(50,1)*-.008], R,'UniformOutput', false);
% extract rs2
r = cell2mat( reshape(R, [1,1,11,10]) );
rs2 = reshape( r(:,1,:,:), [50*11*10,1] );
% do what you want
rs2_sorted = sort(rs2);
rs2_count = hist(rs2, min(rs2):1:max(rs2));

注意 - 我假设您有50x3阵列。如果仅为50x1,那么reshape(R, [1,11,10])reshape( r, [50*11*10,1] );也可以。


hist将所有数字放入不同值的不同区间。它相当于做

rs2_scale =  min(rs2_combined):1:max(rs2_combined);
rs2_count = zeros(1, length(rs2_scale));
for ii = 1:length(rs2_scale)
    rs2_count(ii) = sum( rs2_combined == rs2_scale(ii) );
end

删除零点数 -

rs2_count(rs2_count==0) = [];

然后你可以计算概率 -

rs2_prob = rs2_count / sum(rs2_count);

通过

验证此答案
>> sum(rs2_prob)

ans =

    1.0000