numpy.diag() をお使いください。
python
1numpy.diag(v, k=0)
第2引数を指定しない場合 (デフォルト k=0) は対角成分を返します。
k=n とした場合、n 個上の対角成分の値を返します。
k=n とした場合、-n 個下の対角成分の値を返します。
例えば、k=1 の場合、1つ上にずらした [ 2 8 14 20]
を返します。k=-1 の場合、1つ下にずらした [ 6 12 18 24]
を返します。
python
1import numpy as np
2
3array = np.array(
4 [
5 [1, 2, 3, 4, 5],
6 [6, 7, 8, 9, 10],
7 [11, 12, 13, 14, 15],
8 [16, 17, 18, 19, 20],
9 [21, 22, 23, 24, 25],
10 ]
11)
12
13b = np.diag(array)
14print(b) # [ 1 7 13 19 25]
15
16b = np.diag(array, k=-2)
17print(b) # [11 17 23]
18
19b = np.diag(array, k=1)
20print(b) # [ 2 8 14 20]
参考リンク:
numpy - 上三角行列、下三角行列、対角行列の作成、対角成分の取得 (diag, tri, triu, tirl, etc)
追記
kをどう変えても、"\"の対角線しかとれません。
numpyのなにか別のモジュールを使うのでしょうか?
対角成分 といった場合、2次元配列の (i, i) 成分を指しますので、numpy.diag() では、\ 方向しかとれません。
しかし、numpy.diag() にわたす前に numpy.fliplr() で左右反転させておくことで / 方向も取れます。(fliplr は flip left to right の略)
numpy - 配列を繰り返す、反転、回転、ローテーションする
python
1import numpy as np
2
3array = np.array(
4 [
5 [1, 2, 3, 4, 5],
6 [6, 7, 8, 9, 10],
7 [11, 12, 13, 14, 15],
8 [16, 17, 18, 19, 20],
9 [21, 22, 23, 24, 25],
10 ]
11)
12
13# fliplr() の効果: 配列を左右反転させる。
14print(np.fliplr(array))
15# [[ 5 4 3 2 1]
16# [10 9 8 7 6]
17# [15 14 13 12 11]
18# [20 19 18 17 16]
19# [25 24 23 22 21]]
python
1# 左右反転させた配列の対角成分をとる。
2b = np.diag(np.fliplr(array))
3print(b) # [ 5 9 13 17 21]
4
5b = np.diag(np.fliplr(array), k=-2)
6print(b) # [15 19 23]
7
8b = np.diag(np.fliplr(array), k=1)
9print(b) # [ 4 8 12 16]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/30 05:49
2019/05/30 05:58 編集
退会済みユーザー
2019/05/30 08:09