【问题标题】:Algorithm for finding a permutation matrix of a matrix求矩阵的置换矩阵的算法
【发布时间】:2018-10-03 22:09:13
【问题描述】:

我看到一些类似的问题:

给定元素:

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)

【问题讨论】:

  • 我倾向于认为矩阵不存在P,但我不清楚为什么。我知道矩阵elems_prime 不可逆,但向量elems 也不可逆(向量没有逆),但P 存在于elems。如果 P 存在于矩阵的情况下,它不能只有 0,1,必须有负值,甚至可能是非整数值?

标签: r algorithm matrix permutation


【解决方案1】:

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

由此可见,elem' * P 生成的任何 M' 的秩最多为 1,只留下常规置换矩阵作为 P' 的候选者

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

【讨论】:

  • 你指的是Melems,还是M'elems'?恐怕我不知道后者的列空间对于这两个术语都是 4:```elems' * P = M 3x4 4x4 3x4 ```
  • 我指的是M'elem'(并已相应更新)。 “列空间”不是指矩阵中的列数,而是指列所跨越的向量空间的“维度”。结论是P 不存在,除非它类似于您在示例中给出的置换矩阵。如果这个答案对您来说还没有意义,您可能需要复习一些线性代数(特别是向量空间)。
  • 我会第一个承认总是需要更多的线性代数,但我不认为你的说法是正确的——M'的列空间是4,因为这是线性的数独立列:en.wikipedia.org/wiki/Row_and_column_spaceselem' 确实有线性相关列,但如果它为 M' 生成置换矩阵,我完全愿意以不同方式定义该矩阵。
  • elem'的列空间维度为1,用{k*(1, 1, 1) | 描述对于所有真正的 k}。当您将elem' 乘以另一个矩阵M 时,乘积的列再次是elem' 中列的线性组合。因此,elem' * M 中的每一列的格式为 a*(1, 1, 1)+b*(1, 1, 1)+c*(1, 1, 1)+d*(1, 1, 1)=k'*(1, 1, 1) 对于某些 k'。这表明elem' * M 的列是线性相关的,并且维度为 1(或可能为 0)。因此,elem' * M 不可能等于您希望的满秩矩阵。是的,您需要以不同的方式定义elem'
【解决方案2】:

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

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

顺便说一下,在线性代数中,标准是将向量翻转为列并将矩阵放在它们的左侧。原因是矩阵代表一个线性函数,并且将矩阵放在线性函数所在的相同位置。所以从函数记法到矩阵记法是非常好的。此外,如果您无论如何都必须写一个方阵,那么在页面上写一个右侧的垂直向量而不是左侧的水平向量会占用更少的空间......

【讨论】:

  • 谢谢。这对于我提出的第一个案例是正确的,但我在寻找的不仅仅是问题中的向量。我的 elems_prime 矩阵是 3x4,M_prime 是 3x4,我正在寻找能够找到 4x4 的 P 的算法。
  • @Mittenchops 在这种情况下,回到基础。你有 12 个方程(M_prime 中的每个条目一个),16 个变量(你想要的 P 中的每个条目一个)。建立该线性方程组并通过减少行来解决它。您应该以 4 维解决方案空间结束。但请注意,很可能没有一个可能的解决方案是置换矩阵。
  • 不会有任何解决办法——系统不一致。查看通过将elem' 的第一行与任意列相乘形成的 thrre 方程(注意M' 的列不是elem' 中列的线性倍数)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多