【发布时间】:2018-10-03 22:09:13
【问题描述】:
我看到一些类似的问题:
- Generate permutation matrix from permutation vector
- https://math.stackexchange.com/questions/345166/what-is-the-name-for-a-non-square-permutation-matrix
给定元素:
elems = [1,2,3,4] # dimensions 1x4
如果我有一个向量:
M = [4,2,3,1] # dimensions 1x4
我知道有一些置换矩阵 p 可以乘以 elems * p = M,在这种情况下是:
p =
[
0 0 0 1
0 1 0 0
0 0 1 0
1 0 0 0
] # dimensions 4x4
# eg:
# elems * P = M
1x4 4x4 = 1x4
现在,对于我的问题,我对 M 是非向量、非方阵的情况感兴趣,例如:
M' = [
4 2 3 1
4 3 2 1
1 2 3 4
] # dimensions 3x4
同样的
elems' = [
1 2 3 4
1 2 3 4
1 2 3 4
] # where this is now tripled to be conformant dimensions
# dimensions 3x4
#
# meaning P is still 4x4
您可以看到,在这种情况下,M_prime 和 elems_prime 仍然只是排列,但现在是多变量的,而不是最初的单个向量。
我知道我不能只做以下这种事情,因为矩阵不是正方形的,因此不可逆:
elems' * P = M'
P = elems'^-1 * M'
# eg:
# elems' * P = M'
3x4 4x4 = 3x4
当我尝试时,至少在 R 中,我看到了:
> P <- ginv(elems_prime) %*% M_prime
[,1] [,2] [,3] [,4]
[1,] 0.1 0.07777778 0.08888889 0.06666667
[2,] 0.2 0.15555556 0.17777778 0.13333333
[3,] 0.3 0.23333333 0.26666667 0.20000000
[4,] 0.4 0.31111111 0.35555556 0.26666667
这能把 M' 还给我吗?
> elems_prime %*% P
[,1] [,2] [,3] [,4]
[1,] 3 2.333333 2.666667 2
[2,] 3 2.333333 2.666667 2
[3,] 3 2.333333 2.666667 2
!= M' # No, does not.
所以这是不对的。
我的问题是:
- 正确置换元素矩阵的 P 是多少 进入 M' 矩阵?
- 找到它的算法的名称是什么? (用 R、Haskell 或伪代码实现很棒)
- 有没有办法将 P 的值限制为整数,最好是 0 或 1?
用于 R 再现性
> dput(elems_prime)
structure(c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4), .Dim = 3:4)
> dput(M_prime)
structure(c(4, 4, 1, 2, 3, 2, 3, 2, 3, 1, 1, 4), .Dim = 3:4)
【问题讨论】:
-
我倾向于认为矩阵不存在
P,但我不清楚为什么。我知道矩阵elems_prime不可逆,但向量elems也不可逆(向量没有逆),但P存在于elems。如果 P 存在于矩阵的情况下,它不能只有 0,1,必须有负值,甚至可能是非整数值?
标签: r algorithm matrix permutation