【发布时间】:2015-03-06 09:35:05
【问题描述】:
如何快速判断一个逻辑方阵是否为置换矩阵?例如,
不是置换矩阵,因为第 3 行有 2 个条目 1。
PS:permutation matrix 是一个二元方阵,每行和每列都有一个条目 1,其他地方为 0。
我定义了一个逻辑矩阵,比如
numpy.array([(0,1,0,0), (0,0,1,0), (0,1,1,0), (1,0,0,1)])
这是我的源代码:
#!/usr/bin/env python
import numpy as np
### two test cases
M1 = np.array([
(0, 1, 0, 0),
(0, 0, 1, 0),
(0, 1, 1, 0),
(1, 0, 0, 1)]);
M2 = np.array([
(0, 1, 0, 0),
(0, 0, 1, 0),
(1, 0, 0, 0),
(0, 0, 0, 1)]);
### fuction
def is_perm_matrix(M) :
for sumRow in np.sum(M, axis=1) :
if sumRow != 1 :
return False
for sumCol in np.sum(M, axis=0) :
if sumCol != 1 :
return False
return True
### print the result
print is_perm_matrix(M1) #False
print is_perm_matrix(M2) #True
有没有更好的实现方式?
【问题讨论】:
-
你的矩阵是如何定义的?到目前为止你做了什么?
-
你说的快是什么意思,是指大O还是别的什么意思?
-
您是否将矩阵存储为列表列表?你能保证矩阵只包含整数 0 和 1,或者代码需要检查吗?您可以发布一些代码来向我们展示您的尝试吗?
-
@QiankunSU “方阵逻辑矩阵”不是 Python 类型。
-
彼得伍德所说的。此外,说它是一个逻辑矩阵意味着它的元素是布尔值,即
True和False,但您的示例矩阵包含整数。
标签: python numpy matrix linear-algebra