6

numpy ndarray のコーナー値にアクセスしようとしています。方法論に関しては、私は絶対に困惑しています。どんな助けでも大歓迎です。

たとえば、以下の配列から、array([1,0,0,5]) または array([[1,0],[0,5]]) の戻り値が必要です。

array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  5.],
       [ 0.,  0.,  5.,  5.]])
4

4 に答える 4

8

回答に多様性を加えるために、次のようにしてコーナー項目のビュー (コピーではない) を取得できます。

corners = a[::a.shape[0]-1, ::a.shape[1]-1]

または、一般的な n 次元配列の場合:

corners = a[tuple(slice(None, None, j-1) for j in a.shape)]

これを行うと、ビューを変更して元の配列を変更できます。

>>> a = np.arange(9).reshape(3, 3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> corners = a[tuple(slice(None, None, j-1) for j in a.shape)]
>>> corners
array([[0, 2],
       [6, 8]])
>>> corners += 1
>>> a
array([[1, 1, 3],
       [3, 4, 5],
       [7, 7, 9]])

EDITああ、あなたはコーナー値のフラットリストが欲しい...それは一般的にビューでは達成できないので、@ IanHの答えはあなたが探しているものです。

于 2013-07-30T03:38:20.017 に答える
6

どうですか

A[[0,0,-1,-1],[0,-1,0,-1]]

A配列はどこにありますか。

于 2013-07-30T03:19:15.780 に答える
0

コーナーを手動で指定できます (負のインデックスを使用)。

a = numpy.array([[ 1.,  0.,  0.,  0.],
  [ 0.,  1.,  0.,  0.],
  [ 0.,  0.,  1.,  5.],
  [ 0.,  0.,  5.,  5.]])

result = numpy.array([a[0][0],a[0][-1],a[-1][0],a[-1][-1]])
# result will contain array([ 1.,  0.,  0.,  5.])

result = numpy.array([a[0][0],a[0][-1],a[-1][0],a[-1][-1]])
# result will contain array([[ 1.,  0.],
#                            [ 0.,  5.]])
于 2013-07-30T03:17:13.310 に答える