我试图根据第三列中找到的唯一值来获取所有行,而不是对它们进行排序。见下面的例子。
我将保留的行的索引将是行1,2,3,5,7(按此顺序)
我在考虑使用unique([5 5 3 4],'stable')
('稳定'选项似乎保持索引值顺序而不进行排序),但我使用的Octave 4.0
并没有有稳定的选择如何解决这个问题?
示例数组:
C=[
1, 103.4025175681402, 103.4104224840438, 0.007904915903608867;
2, 102.1231938014567, 102.1146017352405, 0.00859206621620956;
3, 97.5338137548381, 97.53996181901071, 0.006148064172606382;
4, 97.54468038366592, 97.53996181901071, 0.004718564655206592;
5, 93.76199482417094, 93.77030145885571, 0.008306634684771552;
6, 93.77539643924416, 93.77030145885571, 0.005094980388449244;
7, 106.976493571217, 106.9837463671074, 0.007252795890309471]
我试图获得的最终数组
D=
[
1, 103.4025175681402, 103.4104224840438, 0.007904915903608867;
2, 102.1231938014567, 102.1146017352405, 0.00859206621620956;
3, 97.5338137548381, 97.53996181901071, 0.006148064172606382;
5, 93.76199482417094, 93.77030145885571, 0.008306634684771552;
7, 106.976493571217, 106.9837463671074, 0.007252795890309471];
Code: I used thanks Brocodile to gives me the index `1,2,4,6,7` I'm trying to get the index `1,2,3,5,7`
C=[1, 103.4025175681402, 103.4104224840438, 0.007904915903608867;
2, 102.1231938014567, 102.1146017352405, 0.00859206621620956;
3, 97.5338137548381, 97.53996181901071, 0.006148064172606382;
4, 97.54468038366592, 97.53996181901071, 0.004718564655206592;
5, 93.76199482417094, 93.77030145885571, 0.008306634684771552;
6, 93.77539643924416, 93.77030145885571, 0.005094980388449244;
7, 106.976493571217, 106.9837463671074, 0.007252795890309471]
[~,i,~] = unique(C(:,3));
D = C(sort(i),:);
输出是:
1 103.40251756814 103.410422484044 0.00790491590360887
2 102.123193801457 102.11460173524 0.00859206621620956
4 97.5446803836659 97.5399618190107 0.00471856465520659
6 93.7753964392442 93.7703014588557 0.00509498038844924
7 106.976493571217 106.983746367107 0.00725279589030947
请注意,这只是一个例子,会有数百行。 PS:我在ubuntu 64bit 16.04上使用octave 4.0 感谢
答案 0 :(得分:1)
您还可以使用unique
通过将其分配给多个变量来获取唯一的索引。
[D,id,ic] = unique(C);
id
这里为我们提供了D
中C
保存的唯一值的索引。
如果您只想检查第二列中的唯一值,则只能使用unique(C(:,2))
检查第二列。
你现在想要的是C中唯一行(按第2列)的索引;我们可以使用[~,i,~] = unique(C(:,2), "first")
获取它们。在你的例子中,这将给我们:
i =
5
3
2
1
7
现在我们只需要sort(i)
以正确的顺序获取索引,然后将唯一的行复制到D中:
D = C(i,:)
长话短说:
您可以像这样解决'stable'
的缺失:
[~,i,~] = unique(C(:,2), "first");
D = C(sort(i),:);