如何在R中找到方形矩阵的永久性(对于一般维数nxn)?特别是,我正在尝试找到独立但不同分布的群体的订单统计数据的pdf,其中包括计算矩阵的永久性,该矩阵的元素是pdfs和原始种群的cdfs
感谢
答案 0 :(得分:4)
tl; dr 这是一个非平凡的计算问题,似乎并没有在R中实现,并且在计算上足够困难,因此编译的解决方案可能是必要的。最好的办法是编写包含this开源C实现的R代码。
基于the relevant Wikipedia article," Ryser"看起来像是一个很好的搜索术语,用于查找此计算的实现。 library("sos"); findFn("Ryser")
仅找到Spearman's rank correlation的帮助,其中包含
计算Spearman等级相关统计的精确零分布在n中是指数级的。该包使用预先计算的精确分布,其中n <= 22,使用适用于单项式永久性的Ryser公式获得。
这甚至不是一般性实施,而是一个特例。 Googling "permanent Ryser"在我们开始使用here(即MATLAB代码)之前,我们没有提出任何实现。谷歌搜索&#34;永久的Ryser实施&#34;提出了this CodeProject page,它提供了在相当宽松的Code Project Open License下获得许可的相当简单的C代码。
答案 1 :(得分:2)
matrix(1:9, 3)
的永久物只会是:
install.packages("permute"); library(permute)
A<-matrix(1:9, 3)
# Error: sum( apply( allPerms(1:3), 1, function(r) prod( A[1:3, r]) ) )
allPerms
函数似乎忽略了原始向量,因此需要Ben Bolker的一个更正,我应该使用cbind
来构造{的项目的索引{1}}:
A
事实上,这些价值都是正面的而且没有减法,这表明了这个&#34;天真&#34;不推荐实施该定义。
sum( apply( rbind(1:3,allPerms(1:3)), 1,
function(r) prod( A[cbind(1:3, r)]) ) )