我有一个单元格services.AddAuthentication()
.AddFacebook(o =>
{
o.AppId = Configuration.GetValue<string>("Facebook:AppId");
o.AppSecret = Configuration.GetValue<string>("Facebook:AppSecret");
o.Events.OnRemoteFailure = (context) =>
{
context.Response.Redirect("/account/login");
context.HandleResponse();
return System.Threading.Tasks.Task.CompletedTask;
};
});
,其中有一些(很大)特定的1:10排列,其中有些是重复的。如何计算每个排列的出现次数?
输出应易于访问以供以后使用,例如我可以做类似
的操作c
经过一些搜索后,有c([1 2 5 4 3 7 8 9 6 10]) = 20
,但它似乎仅适用于双精度数组。我也不想使用histcounts
,因为有很多不同的排列。
答案 0 :(得分:1)
让我们用c
的{{1}}排列定义示例数据N
:
1:M
然后
N = 1e5;
M = 10;
c = cell(1,N);
for n = 1:N
c{n} = randperm(M);
end
给出一个[unique_perms,~,w] = unique(vertcat(c{:}), 'rows');
count_perms = accumarray(w,1);
列矩阵M
,其中每一行是unique_perms
的唯一排列,以及一个列向量c
和相应的出现次数。
答案 1 :(得分:0)
这是定义匿名函数以计算单元格c
中某些排列的一种方法:
permCount = @(perm, c) sum(cellfun(@(x) isequal(x, perm), c));
对于任务中的排列:
permCount([1 2 5 4 3 7 8 9 6 10], c)
将在c
如果愿意,可以在定义匿名函数之前确保单元格c
存在。然后您可以将其保留为输入:
c = @(perm) sum(cellfun(@(x) isequal(x, perm), c)); % cell c must exist
c([1 2 5 4 3 7 8 9 6 10]) % gives the count
这完全可以提供您编写的内容,但最好为匿名函数使用其他名称,以避免混淆。