obc*_*don 8 sorting matlab vector counting sequence
如果我有这个向量:
x = [1 1 1 1 1 2 2 2 3 4 4 6 6 6 6]
Run Code Online (Sandbox Code Playgroud)
我想根据自己得到每个唯一号码的位置.
y = [1 2 3 4 5 1 2 3 1 1 2 1 2 3 4]
Run Code Online (Sandbox Code Playgroud)
目前我正在使用:
y = sum(triu(x==x.')) % MATLAB 2016b and above
Run Code Online (Sandbox Code Playgroud)
它很紧凑,但显然没有内存效率.
对于MATLAB编程的纯粹美,我会避免使用循环.你有更好的简单实现吗?
语境:
我的最终目标是对矢量进行排序,x
但约束条件是出现N
次数的数字优先于另一个出现N
次数的数字:
[~,ind] = sort(y);
x_relative_sort = x(ind);
% x_relative_sort = 1 2 3 4 6 1 2 4 6 1 2 6 1 6 1
Run Code Online (Sandbox Code Playgroud)
假设x
是,这里整理是一个量化的替代使用unique
,diff
以及cumsum
:
[~, index] = unique(x);
y = ones(size(x));
y(index(2:end)) = y(index(2:end))-diff(index).';
y = cumsum(y);
Run Code Online (Sandbox Code Playgroud)
现在您可以应用最终排序:
>> [~, ind] = sort(y);
>> x_relative_sort = x(ind)
x_relative_sort =
1 2 3 4 6 1 2 4 6 1 2 6 1 6 1
Run Code Online (Sandbox Code Playgroud)
如果你有正整数,你可以使用稀疏矩阵:
[y ,~] = find(sort(sparse(1:numel(x), x, true), 1, 'descend'));
Run Code Online (Sandbox Code Playgroud)
同样x_relative_sort
可以直接计算:
[x_relative_sort ,~] = find(sort(sparse(x ,1:numel(x),true), 2, 'descend'));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
103 次 |
最近记录: |