查找矩阵置换矩阵的算法

时间:2018-10-03 22:09:14

标签: r algorithm matrix permutation

我看到一些类似的问题:

给出元素:

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_primeelems_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.

所以这不对。

我的问题是:

  1. 正确置换元素矩阵的正确P是什么 进入M'矩阵?
  2. 找到它的算法的名字是什么? (用R,Haskell或伪代码实现是很好的方法)
  3. 有没有办法将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)

2 个答案:

答案 0 :(得分:1)

请注意,M'的列空间比elem'的列空间高。这意味着从elem'M'不存在线性映射,因为线性映射无法增加矩阵的行或列空间(将其视为基础变换很有用)。

因此,M'生成的任何elem' * P的秩最高为1,仅保留常规置换矩阵作为P'的候选对象

如果我们考虑从M'回到elem,这是一个完全不同的问题,这种不对称性也值得注意。

答案 1 :(得分:0)

当M不是向量时,这是不可能的。

这就是原因。通常,如果我们将nxm矩阵乘以mxp矩阵,我们将得到nxp矩阵。这里的elems是一个向量,是一个1x4矩阵,因此elems * P必须是某种1x?矩阵。通过延长P,可以延长M,但是必须更改elems才能使M更高。

顺便说一句,在线性代数中,通常将向量翻转为列并将矩阵放在其左侧。这样做的原因是矩阵表示线性函数,并将矩阵放在线性函数所在的相同位置。因此,从功能符号转换为矩阵符号时非常好。另外,如果您仍然必须编写一个方阵,则在页面上花费较少的空间在右侧写一个垂直矢量,而在左侧写一个水平矢量...