ある整数Nを与えたら、以下のようなN×N-1の行列Zを出力するようなプログラムを書きたいです。

Z = [[1 2 3 ... N]
     [0 2 3 ... N]
     [0 1 3 ... N]
      ...
     [0 1 2 ... N]
     [0 1 2 ... N-1]]

つまり、i番目の行は、iを除くすべての値を持っているような行列です。単純なコードを書くと

Z = [[j for j in range(N) if j != i] for i in range(N)]

となるのですが、Nが大きくなると時間がかかってしまいます。

このようなことを、numpyで効率的に書くにはどうすれば良いでしょうか?