matlab - 在Matlab中修改排序以区分不等式和等式
问题描述
A
考虑Matlab 中维度为 的矩阵MxN
。我希望您能帮助构建一种算法,该算法可以识别A
具有严格意义上的从最小到最大的相同元素排序特征的行。但是,我不能使用sort
,因为sort
不区分平等和不平等。
让我用一个例子更好地解释
clear
A=[1 -2 -4; ...
0 -3 5;
1 1 2
1 2 3
3 3 4
10 7 11];
请注意:
%A(1,3)<A(1,2)<A(1,1)
%A(2,2)<A(2,1)<A(2,3)
%A(3,1)=A(3,2)<A(3,3)
%A(4,1)<A(4,2)<A(4,3)
%A(5,2)=A(5,1)<A(5,3) %equivalent to A(5,1)=A(5,2)<A(5,3)
%A(6,2)<A(6,1)<A(6,3)
另请注意:第 1 行的排序(严格意义上)与任何其他行的排序不同,第 2 行的排序与第 6 行的排序相同,第 3 行的排序与排序相同在第 5 行中,第 4 行的排序不同于任何其他行的排序。
因此,我想要一个算法提供一个B
维度向量,6x1
其特征是
%B(2)=B(6) and ~= all other elements of B
%B(3)=B(5) and ~= all other elements of B
%B(1)~= all other elements of B
%B(4)~= all other elements of B
输入的实际数字B
可以是完全任意的。例如,我很乐意得到
B=[3;...
2;...
1;...
4;...
1;...
2];
让我告诉你为什么sort
不起作用
[~,index] = sort(A,2);
[~,~,Bwrong]=unique(index, 'rows');
sort
将第 3、4、5 行标识为具有相同的顺序,因为它不区分等式和不等式。
最后让我说我不想使用循环,因为实际上循环A
非常大。
解决方案
您还需要使用 sorted 的第一个差异A
来考虑严格的排序。
[s, idx] = sort(A,2);
d = diff(s,[],2) == 0;
[~,~,B] = unique([idx d],'rows');
推荐阅读
- node.js - 为什么 Express res.json() 会阻止 Google Sheets API 超过 30 秒
- c++ - 使用 Microsoft Visual Studio 的示例 C++ 项目中的 C3861 编译器错误
- android - android 服务是否具有 `onSaveInstanceState` 等价物?
- debugging - 使用 rust-gdb 进行调试时,如何进入在返回值中调用的函数?
- amazon-cloudwatch - 如何将 cloudwatch 自定义指标发送到 Amazon Quicksight Dashboard
- android - 未处理的异常:MissingPluginException(在通道上找不到方法 ... 的实现 ...)
- haskell - 使用导出的符号
- azure - 使用 Azure Resource Graph 获取其他用户的资源
- python - pygame 混合器中的暂停功能不起作用
- typescript - TypeScript 中循环类型之间的映射