- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个矩阵,例如 5x5。
[,1] [,2] [,3] [,4] [,5]
[1,] 22 -2 -2 -2 2
[2,] -2 22 2 2 2
[3,] -2 2 22 2 2
[4,] -2 2 2 22 2
[5,] 2 2 2 2 22.
如您所见,矩阵是对称的。在主对角线上方,有4+3+2+1=10个位置,我通过combn
找到所有可能的(排列)矩阵,在这10个位置有(-2)3次.这意味着 10!/3!*7!=120 个矩阵。
但其中一些是等价的。
所以,我的问题是如何从 120 中找到非等价矩阵。
我正在考虑置换矩阵,因为如果我从 120 个矩阵中选择一个并使用 rmperm
,结果我将得到 120 个矩阵中的一个(随机)。
当我有 5x5 和 6x6 矩阵时,我没有问题,因为我已经开发了一种算法。但是现在我想在 7x7 矩阵和更多矩阵中做同样的事情,但是算法非常慢,因为我有很多循环。
所以,当我从 120 个矩阵中选择一个矩阵时,我想用一个命令给我 120 个矩阵中的所有排列矩阵。
非常感谢!
最佳答案
基本上,您要求所有行/列排列。对于 n x n 矩阵,有 n! (n 阶乘) 排列的行和 n!列的排列,总共 (n!)^2 行/列排列(并非所有排列都必须是唯一的)。
第一步是获取样本数据集并获取行/列索引的所有排列的集合(我假设是方矩阵,但很容易扩展到非方矩阵):
# Sample dataset:
library(sna)
set.seed(100)
(g <- rgraph(3))
# [,1] [,2] [,3]
# [1,] 0 0 1
# [2,] 1 0 0
# [3,] 1 1 0
# All permutations of indices
library(gtools)
(perms <- permutations(nrow(g), nrow(g)))
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 1 3 2
# [3,] 2 1 3
# [4,] 2 3 1
# [5,] 3 1 2
# [6,] 3 2 1
您可以计算行/列排序的所有配对,您可以使用它来获取所有可能的行/列排列:
pairings <- expand.grid(1:nrow(perms), 1:nrow(perms))
head(pairings)
# Var1 Var2
# 1 1 1
# 2 2 1
# 3 3 1
# 4 4 1
# 5 5 1
# 6 6 1
all.perms <- lapply(1:nrow(pairings), function(x) g[perms[pairings[x,1],], perms[pairings[x,2],]])
head(all.perms)
# [[1]]
# [,1] [,2] [,3]
# [1,] 0 0 1
# [2,] 1 0 0
# [3,] 1 1 0
#
# [[2]]
# [,1] [,2] [,3]
# [1,] 0 0 1
# [2,] 1 1 0
# [3,] 1 0 0
# ...
最后,您可以使用 unique
来获取作为唯一矩阵的 all.perms
的元素:
all.unique.perms <- unique(perms)
length(all.unique.perms)
# [1] 18
关于r - 如何在 R 中找到矩阵的所有可能排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995794/
降本手段一招鲜,增效方法吃遍天; 01 互联网行业里; 降本策略千奇百怪,手段却出奇一致;增效方法五花八门,手段更是花里胡哨; 对于企业来说;
有什么方法可以使用 angularjs 中的部分进行代码分组吗? 原因 --- 我的 Controller 包含太多代码。该 Controller 包含了多个方法和大量功能的代码,降低了代码的可读性。
不幸的是,我的数据库的数据模型必须改变,所以我正在寻找最轻松的方式来迁移我的数据。 此时情况如何: create table cargo{ id serial primary key, per
在 QTextEdit 对象中,假设我想知道字符在鼠标光标下的位置。 我会写... void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse
是否可以在 C++ 中返回一个 return 语句或做一些具有类似功能的事情? 例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将很方便。如果它是一个 nul
我的 PC 上有一个控制台应用程序,它是 signalR 服务器。 我有一个 html 页面,它是互联网上的 signalR 客户端。但我尝试连接服务器,但我有一个错误的请求 400 错误。如果服务器
我想将应用程序作为后台进程运行。当点击应用程序图标时,它不会显示任何 View ,只会启动后台进程。 最佳答案 对于 iOS 这是不可能的,但是对于 android,react native 有 he
我知道有(昂贵的)框架可以让你在 VS C# 中编写 android 应用程序并将其编译为 android apk。 我也知道,可以在 VS 中编写 Java 应用程序(link)。 是否有可能,甚至
我在做: can :manage, :all if user.role == 'admin' can :approve, Anuncio do |anuncio| anuncio.try(:apr
我是一名优秀的程序员,十分优秀!