numpy.diagflat – 対角線が指定の要素、他が0埋めの配列を生成

numpy.diagflatは、引数に渡した配列の要素を全て、対角線上に配置して、他の要素を0埋めした新しい配列を戻す関数です。

実際のコードで確認していきましょう。

目次

1. numpy.diagflatの使い方

まずは、numpy.diagflatの書き方を確認しましょう。

numpy.diagflat

書き方:

numpy.diagflat(v, k=0)

パラメーター:

引数   解説
v array_like 配列を渡します。
k(optional) intどの対角線上に要素を配置するかを指定します。デフォルト値は0です。正の値を指定すると上から右に、負の値を指定すると下から左にずれていきます。

戻り値: 

ndarray:2次元配列

一緒に確認したい関数:

  • diag: 2次元配列から対角線の要素を取得または1次元配列を対角線に配置
  • diagonal: 既存の配列の対角線を要素とした配列を生成
  • trace: 配列の対角線の要素の合計を取得

それではサンプルコードを見ながら、実際の使い方を確認していきましょう。

1.1. 要素を対角線に配置し他を0埋めした配列を生成

np.diagflatは、引数に渡した配列の要素を全て対角線に配置して、他の要素を0で埋めた新しい配列を生成します。

早速、以下のコードをご覧ください。

In [1]:
'''  要素を対角線に配置し他を0埋めした配列を生成'''
import numpy as np
np.diagflat([1, 2, 3])
Out[1]:
array([[1, 0, 0],
       [0, 2, 0],
       [0, 0, 3]])

多次元配列を渡した場合も、全ての要素を対角線に配置します。以下のコードは、2次元配列の例ですが、3次元配列でも4次元配列でも同様です。

In [2]:
'''  多次元配列を渡しても同じ  '''
#  2次元配列を生成
arr = np.arange(1, 5).reshape(2, 2)
print('arr: \n', arr)
#  要素を対角線に配置した配列を生成
diag = np.diagflat(arr)
print('diag: \n', diag)
arr: 
 [[1 2]
 [3 4]]
diag: 
 [[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]

1.2. 対角線の位置を指定

オプション引数「k=」を指定すると、対角線の位置を指定することができます。指定した値の分だけ上から右にずれていきます(負の値を指定した場合は下から左にずれる)。

なお、この場合、生成する2次元配列のshapeは、shape(n, n+|k|)になります(nは関数の引数に渡す配列の要素数)

以下のコードをご確認ください。

In [3]:
'''  「k=」でどの対角線に要素を配置するかを指定  '''
diag = np.diagflat([1, 2, 3], k=1)
print(diag)
[[0 1 0 0]
 [0 0 2 0]
 [0 0 0 3]
 [0 0 0 0]]

なお、わざわざ「k=」と書かなくても、以下のコードのように整数を渡すだけでも構いません。

In [4]:
'''  こちらの書き方でも可(負の値を指定)  '''
diag = np.diagflat([1, 2, 3], -1)
print(diag)
[[0 0 0 0]
 [1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]]

このように負の値を指定すると、対角線が下から左にずれていくこともご確認ください。

2. まとめ

以上がnumpy.diagflatの使い方です。対角線の操作については、以下の関数も併せて確認しておくと良いでしょう。

  • eye: 対角線の要素が1で他は0埋めの配列を生成
  • identity: 対角線の要素が1で他は0埋めの正方形の配列を生成
  • diag: 2次元配列から対角線の要素を取得または1次元配列を対角線に配置
  • diagonal: 既存の配列の対角線を要素とした配列を生成
  • trace: 配列の対角線の要素の合計を取得



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる