我有一个基于列排序的单元格数组。但是,MATLAB告诉我sortrows
不适用于单元阵列。我在其他一些问题上看到它确实有效,但我不知道我做错了什么。
我正在看的单元格数组称为PM25。这是一个1x7的细胞。 7 PM25 {i}中的每一个都是365x5xnumber的形式,其中数字不同。
以下是.mat文件的链接:https://www.dropbox.com/sh/li3hh1nvt11vok5/4YGfwStQlo 它是PM25变量。
我基本上想要进入365x5xnumber级别,并根据第5列对每个级别进行排序。
这就是我一直在做的事情。我转换为双倍因为这是MATLAB允许我进行排序的唯一方法,但我不愿意,因为我在日期和名称列中丢失了一些信息。当我以单元格形式离开时,MATLAB会告诉我,细胞不能用于分拣机,或者我没有将数据作为二维矩阵。
for i = 1:length(names) % 7 states
for j = 1:length(PM25{i}(1,1,:)) % length of each of the `numbers` - Number of sites
PM25_info = str2double(PM25{i});
PM25_sorted = sortrows(PM25_info(:,:,j),5);
end
end
上面的代码不会生成错误,但仍然不会对第5列进行排序。我不知道出了什么问题。
理想的做法是将PM25作为一个单元格进行排序。
答案 0 :(得分:0)
我不确定你在没有转换的情况下尝试了什么,但我尝试了下面的代码,它似乎也按照你想要的方式工作。它似乎也没有丢失任何信息。我希望这对你有用。
%Getting 7 random matrices 365x5xnumber
a = rand(365,5,floor(rand(1).*8)+1).*10;
b = rand(365,5,floor(rand(1).*8)+1).*10;
c = rand(365,5,floor(rand(1).*8)+1).*10;
d = rand(365,5,floor(rand(1).*8)+1).*10;
e = rand(365,5,floor(rand(1).*8)+1).*10;
f = rand(365,5,floor(rand(1).*8)+1).*10;
g = rand(365,5,floor(rand(1).*8)+1).*10;
%put in cell array
PM25 = {a,b,c,d,e,f,g};
for i = 1:length(PM25)%7 states
for j = 1:length(PM25{i}(1,1,:))%length of numbers
PM25_sort{i}(:,:,j) = sortrows(PM25{i}(:,:,j),5);
end
end
答案 1 :(得分:0)
使用Cellfun:
%Creating an example cell array
a=cell(1,7);
for i=1:7
a{i}=rand(365,5,randi(10));
end
result=cellfun(@(x) sort(x,2),a,'UniformOutput',false);
result
将是一个1x7
单元格数组,其中每个矩阵将根据第二维进行排序。