我有三个.mat文件,A.mat,B.mat和C.mat。并且.mat文件的内容如下所示: ![在此输入图像说明] [1]
它是r2 = [rs2,cs2,sortedValues2]格式。我怎样才能对三者中的rs2(例如,3468,3909 ......)进行排序 .mat文件在一起递增,并计算rs2每个元素的出现次数? 任何人都可以给我任何建议吗?
答案 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