回答編集履歴

4

dd

2019/05/30 06:06

投稿

tiitoi
tiitoi

スコア21960

test CHANGED
@@ -86,7 +86,7 @@
86
86
 
87
87
  **対角成分** といった場合、2次元配列の (i, i) 成分を指しますので、numpy.diag() では、\ 方向しかとれません。
88
88
 
89
- しかし、numpy.diag() にわたす前に numpy.fliplr() で左右反転させておくことで / 方向も取れます。
89
+ しかし、numpy.diag() にわたす前に numpy.fliplr() で左右反転させておくことで / 方向も取れます。(fliplr は flip left to right の略)
90
90
 
91
91
 
92
92
 

3

d

2019/05/30 06:06

投稿

tiitoi
tiitoi

スコア21960

test CHANGED
@@ -138,7 +138,7 @@
138
138
 
139
139
 
140
140
 
141
- ```
141
+ ```python
142
142
 
143
143
  # 左右反転させた配列の対角成分をとる。
144
144
 

2

d

2019/05/30 05:59

投稿

tiitoi
tiitoi

スコア21960

test CHANGED
@@ -71,3 +71,91 @@
71
71
  参考リンク:
72
72
 
73
73
  [numpy - 上三角行列、下三角行列、対角行列の作成、対角成分の取得 (diag, tri, triu, tirl, etc)](http://pynote.hatenablog.com/entry/numpy-create-upper-lower-diagonal-matrix#numpydiag)
74
+
75
+
76
+
77
+ ## 追記
78
+
79
+
80
+
81
+ > kをどう変えても、"\"の対角線しかとれません。
82
+
83
+ > numpyのなにか別のモジュールを使うのでしょうか?
84
+
85
+
86
+
87
+ **対角成分** といった場合、2次元配列の (i, i) 成分を指しますので、numpy.diag() では、\ 方向しかとれません。
88
+
89
+ しかし、numpy.diag() にわたす前に numpy.fliplr() で左右反転させておくことで / 方向も取れます。
90
+
91
+
92
+
93
+ [numpy - 配列を繰り返す、反転、回転、ローテーションする](http://pynote.hatenablog.com/entry/numpy-array-manipulation-functions#numpyfliplr)
94
+
95
+
96
+
97
+ ```python
98
+
99
+ import numpy as np
100
+
101
+
102
+
103
+ array = np.array(
104
+
105
+ [
106
+
107
+ [1, 2, 3, 4, 5],
108
+
109
+ [6, 7, 8, 9, 10],
110
+
111
+ [11, 12, 13, 14, 15],
112
+
113
+ [16, 17, 18, 19, 20],
114
+
115
+ [21, 22, 23, 24, 25],
116
+
117
+ ]
118
+
119
+ )
120
+
121
+
122
+
123
+ # fliplr() の効果: 配列を左右反転させる。
124
+
125
+ print(np.fliplr(array))
126
+
127
+ # [[ 5 4 3 2 1]
128
+
129
+ # [10 9 8 7 6]
130
+
131
+ # [15 14 13 12 11]
132
+
133
+ # [20 19 18 17 16]
134
+
135
+ # [25 24 23 22 21]]
136
+
137
+ ```
138
+
139
+
140
+
141
+ ```
142
+
143
+ # 左右反転させた配列の対角成分をとる。
144
+
145
+ b = np.diag(np.fliplr(array))
146
+
147
+ print(b) # [ 5 9 13 17 21]
148
+
149
+
150
+
151
+ b = np.diag(np.fliplr(array), k=-2)
152
+
153
+ print(b) # [15 19 23]
154
+
155
+
156
+
157
+ b = np.diag(np.fliplr(array), k=1)
158
+
159
+ print(b) # [ 4 8 12 16]
160
+
161
+ ```

1

d

2019/05/30 05:57

投稿

tiitoi
tiitoi

スコア21960

test CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
  b = np.diag(array)
52
52
 
53
- print(b)
53
+ print(b) # [ 1 7 13 19 25]
54
54
 
55
55
 
56
56