我需要一個矩陣,爲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點之間的距離,而不浪費時間重複一段距離。這些座標讓我只做一次。
我需要一個矩陣,爲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點之間的距離,而不浪費時間重複一段距離。這些座標讓我只做一次。
你基本上要增加的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]])
列出解救!
>>> matrix = [[1]*i + [0]*(4-1) for i in range(4)]
替換4你想要的任何範圍。對於Python低於3.X你應該代替你xrange
range
爲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的位置。如果這真的是製作矩陣的唯一原因,那麼有更有效的方法來生成這些位置。特別是,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)]
而不是'1 if x
arshajii