行ベクトルA、A = [a1 a2 a3 ..... an]があり、対角行列B = diag(a1、a2、a3、.....、an)を作成したいこの行ベクトルの要素。これをPythonでどのように行うことができますか?
[〜#〜] update [〜#〜]
これは問題を説明するコードです:
import numpy as np
a = np.matrix([1,2,3,4])
d = np.diag(a)
print (d)
このコードの出力は[1]ですが、望ましい出力は次のとおりです。
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
diag メソッドを使用できます:
import numpy as np
a = np.array([1,2,3,4])
d = np.diag(a)
# or simpler: d = np.diag([1,2,3,4])
print(d)
結果:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
行ベクトルがある場合、これを行うことができます。
a = np.array([[1, 2, 3, 4]])
d = np.diag(a[0])
結果:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
質問の与えられた行列に対して:
import numpy as np
a = np.matrix([1,2,3,4])
d = np.diag(a.A1)
print (d)
結果は再び:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
diagflat を使用することもできます。
import numpy
a = np.matrix([1,2,3,4])
d = np.diagflat(a)
print (d)
Diagメソッドと同様に、
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
しかし、.A1で平坦化する必要はありません
別の解決策は次のとおりです。
import numpy as np
a = np.array([1,2,3,4])
d = a * np.identity(len(a))
ここでのさまざまな回答のパフォーマンスについては、timeit
を100000回繰り返して取得します。
np.array
およびnp.diag
(Marcinの回答):2.18E-02 snp.array
およびnp.identity
(この回答):6.12E-01 snp.matrix
およびnp.diagflat
(Bokeeの回答):1.00E-00 s