对于n维,我需要为n = 4制作一个矩阵:
[0,0,0,0]
[1,0,0,0]
[1,1,0,0]
[1,1,1,0]
因为我需要1s的位置,即
0, 1
0, 2
0, 3
1, 2
1, 3
2, 3
这是因为我想计算x点之间的距离,而不会浪费时间重复一段距离。这些坐标只允许我这样做一次。
答案 0 :(得分:9)
你基本上想要增加每行1
的数量(从0开始),同时用0
s填充行的其余部分,从而保持一个恒定的长度。尝试这样的事情:
>>> 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]]
如果你正在使用NumPy:
>>> 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]])
答案 1 :(得分:3)
列出对救援的理解!
>>> matrix = [[1]*i + [0]*(4-1) for i in range(4)]
用您想要的任何范围替换4。对于低于3.X的Python,您应该xrange
而不是range
答案 2 :(得分: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]
答案 3 :(得分: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)]