用对角线边缘表示数组的Python方法是什么?

Sch*_*ind 3 python arrays loops numpy list-comprehension

我通过使用两个for循环创建了一个具有对角线边缘的数组,但是我想知道是否有一种更简单的方法,例如列表理解:

im_diag = np.zeros((im_size, im_size), dtype=np.int8)

for x in range(im_size):
    for y in range(im_size):
        if x+y >= im_size:
            im_diag[x,y] = 1
Run Code Online (Sandbox Code Playgroud)

CDJ*_*DJB 5

您可以尝试以下方法:

>>> np.flip(np.tril(np.ones((5,5)), k=-1), 1)
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1.],
       [0., 0., 0., 1., 1.],
       [0., 0., 1., 1., 1.],
       [0., 1., 1., 1., 1.]])
Run Code Online (Sandbox Code Playgroud)

np.ones创建一个1s 数组,

np.tril创建一个较低的三角形数组

np.flip水平翻转数组

  • 在较小的阵列大小下,并不是特别好。对于尺寸大于约1000的数组,此方法将更快。通常,首先在numpy中使用列表推导会打败使用numpy的意义,因为您会失去使用numpy函数获得的任何速度。 (2认同)