我正在尝试根据同一矩阵第 2 列中列出的最大数量在矩阵的一列中查找唯一值。
我的代码如下:
Testing = find(unique(RAW_DATA_2(:,1))&max(RAW_DATA_2(:,2)))
对我来说,它读作在矩阵的第 1 列中查找唯一项,这也是第 2 列的最大值。然而,Matlab 不同意我的观点。
另一种方法是甚至不使用 find 函数,而只返回一个仅包含唯一值和每个唯一值的最大数量的矩阵,这是更好的选择。我尝试使用我在堆栈溢出上找到的一些代码来执行此操作,但遇到问题,因为我无法将其从“第一个”修改为“唯一”。
I = true(size(RAW_DATA_2,1),1);
idx = [];
while any(I)
idx(end+1) = find(I,1,'first'); %#ok
I = I & all(~bsxfun(@eq, RAW_DATA_2, RAW_DATA_2(idx(end),:)),2);
end
result = RAW_DATA_2(idx,:);
最佳答案
我认为您的澄清评论使问题更容易理解。您应该考虑将其添加到问题本身中。这是一些可能对您有帮助的代码
a = [0 10; 1 100; 3 175; 4 80; 1 200; 2 400; 3 150; 0 10]; % your raw data
asorted = unique(a, 'rows'); %returns unique rows, sorted by value
请注意,asorted
不包含任何重复的行,并按以下方式排序:
asorted =
0 10
1 100
1 200
2 150
2 300
2 400
3 150
3 175
4 80
现在很清楚,包含第 1 列的每个唯一元素的最下面一行就是我们所需要的。这可以通过以下方式完成:
diffidx = [diff(asorted(:, 1)); 1]; % appending 1 because the last row
% must always be included
result = asort(diffidx~=0, :)
关于matlab - 查找受约束的唯一值 - Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868402/