2013-04-16 124 views
3

我需要一個矩陣,爲n維,看起來像這樣對於n = 4:如何設置0-1的下三角矩陣?

[0,0,0,0] 
[1,0,0,0] 
[1,1,0,0] 
[1,1,1,0] 

,因爲我需要1秒的位置,即

0, 1 
0, 2 
0, 3 
1, 2 
1, 3 
2, 3 

這是因爲我想要計算x點之間的距離,而不浪費時間重複一段距離。這些座標讓我只做一次。

回答

9

你基本上要增加的1 s分別行(從0開始)的數量,同時與0小號填充行的其餘部分,從而保持一個恆定的長度。如果您在使用NumPy的

>>> n = 4 
>>> [[1]*i + [0]*(n - i) for i in xrange(n)] 
[[0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 0], [1, 1, 1, 0]] 

:嘗試這樣的事情

>>> import numpy as np 
>>> np.tril(np.ones((n, n), dtype=int), -1) 
array([[0, 0, 0, 0], 
     [1, 0, 0, 0], 
     [1, 1, 0, 0], 
     [1, 1, 1, 0]]) 
3

列出解救!

>>> matrix = [[1]*i + [0]*(4-1) for i in range(4)]

替換4你想要的任何範圍。對於Python低於3.X你應該代替你xrangerange

1

n=5

matrix = [[1 if x<y else 0 for x in range(n)] for y in range(n)] 

輸出:

[0, 0, 0, 0, 0] 
[1, 0, 0, 0, 0] 
[1, 1, 0, 0, 0] 
[1, 1, 1, 0, 0] 
[1, 1, 1, 1, 0] 
+1

而不是'1 if x arshajii

1

你解釋過你想要下三角矩陣的理由是得到1的位置。如果這真的是製作矩陣的唯一原因,那麼有更有效的方法來生成這些位置。特別是,itertools.combinations(range(n), 2)可以工作:

In [209]: import itertools 

In [210]: list(itertools.combinations(range(4), 2)) 
Out[210]: [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)] 
相關問題