Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置0-1的下三角矩阵?_Python_Arrays_Matrix_Numpy - Fatal编程技术网

Python 如何设置0-1的下三角矩阵?

Python 如何设置0-1的下三角矩阵?,python,arrays,matrix,numpy,Python,Arrays,Matrix,Numpy,我需要做一个矩阵,对于n维,在n=4时,像这样: [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]*i+[0]*(4-1)表示范围(4)内的i] 用你想要的范围代替4。对于低于3.X的Python,您应该xrange而不是range您基本上希望增加每行1s的数量(从

我需要做一个矩阵,对于n维,在n=4时,像这样:

[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]*i+[0]*(4-1)表示范围(4)内的i]


用你想要的范围代替4。对于低于3.X的Python,您应该
xrange
而不是
range

您基本上希望增加每行
1
s的数量(从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]])
对于
n=5

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

你解释说你想要下三角矩阵的原因是为了得到1的位置。如果这真的是制作矩阵的唯一原因,那么有更有效的方法来生成这些位置。特别是,
itertools.组合(范围(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,如果x
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)]