我想在Matlab中排序(排序)向量的元素,并且具有相同值的元素具有相同的排名(按降序排列).所以我想要一个例程如:
>> Rank = ComputeRanking([ 5 10 5 5 1])
Rank =
2 1 2 2 5
Run Code Online (Sandbox Code Playgroud)
我在mathworks网站上找到了部分解决方案:排名值:
function vecRank = ComputeRanking2(dataVector)
%
% Sort data in descending order with duplicates
%
[srt, idxSrt] = sort(dataVector,'descend');
% Find where are the repetitions
idxRepeat = [false; diff(srt) == 0];
% Rank with tieds but w/o skipping
rnkNoSkip = cumsum(~idxRepeat);
% Preallocate rank
vecRank = 1:numel(dataVector);
% Adjust for tieds (and skip)
vecRank (idxRepeat) = rnkNoSkip(idxRepeat);
% Sort back
vecRank …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种方法可以datetime在Matlab中预先分配数组。
我解释我的问题:我需要从许多文件(假设它们是 100)中读取多个日期(假设它们是 10),并且我想将其存储在日期时间数组 10X100 中。如果我的数据是简单的数字日期(即double),我可以将数组预先分配为DataTable = zeros(10,100):我想做一些与datetime数据类型类似的事情,但我找不到如何做,你能帮助我吗?
找到可能的解决方法/解决方案
我做了一些测试,发现这个解决方法可能会出现问题:
DataTable = repmat(datetime(0,0,0), 10, 100);
Run Code Online (Sandbox Code Playgroud)
这样我从一开始就有一个datetime初始化为默认值类型的 10X100 数组。我将此编辑发布到问题中,以防它对某人有帮助
在Matlab中我有几个存储在矩阵中的数据库记录DataMatrix.矩阵的每一行都是一条记录,每列都是记录属性的值.为了使程序易于理解,DataMatrix我定义了一个变量名称,用于解释与列关联的属性,即:
ColApple = 1;
ColOrange = 2;
ColLemon = 3;
...
Run Code Online (Sandbox Code Playgroud)
我有关于50列的名称.
我的问题是,in in DataMatrix用于不同的函数,我想总是使用列名来处理数据DataMatrix.所以,我有不同的功能,两个数值之间的共享ColApple,ColOrange,ColLemon,...
到目前为止,我想到了两种可能的方法:
定义一个函数,返回列名的值,即:
[ColApple, ColOrange, ColLemon, ... ] = getColNames
我会避免使用全局解决方案,因为我认为它很危险,也因为我希望列名称在可能的情况下保持不变.第二种方法更好,但由于我有50列,我不知道是否有一个函数返回50不同的值是一个好主意(在我看来也很难维护).
任何人都有更强大或可维护的方法来解决这个问题?我相信我不是第一个处理这个问题的人,但我无法找到解决方案.