1

各次元での形状の上限を1つ減らすことで、任意のランクのnumpyndarrayのサイズを縮小したいと思います。配列の値は、元のインデックスに対して移動しないでください。

それで、

    [N] becomes [N-1]
  [N,M] becomes [N-1, M-1]
[N,M,P] becomes [N-1, M-1, P-1], etc.

これは、事前に配列ランクを知らない関数によって処理される必要があります。

import numpy as np

def truncator( array ):
   # flailing
   return truncated_array


>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> truncator(a)
array([[0, 1],
       [3, 4]])

私は成功について考えましたが、成功reshaperesizeませんでした。配列のランクを事前に知っていると、のようなビューの使用方法truncated_array = array[:-1,:-1]はわかりますが、その概念を任意のランクで機能させる方法はわかりません。Elipses、、のような...固定幅のものはありますか?それは役立つかもしれません。

4

1 に答える 1

0
def truncator(array):
  new_shape = [d-1 for d in array.shape]
  return np.resize(array, new_shape)

これがうまくいくことを願っています。

編集:配列を切り捨てる方法を指定していません:次:-1のような一連の s が必要な場合a[:-1,:-1:,-1]:

def another_truncator(array):
  slicers = [slice(-1) for d in array.shape]
  return array[slicers]


>>> a
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4]])
>>> another_truncator(a)
array([[0, 1],
       [1, 2]])

それは何をします:

によってコレクションを「スライス」できますcol[start:end:step]。実際、で使用されているスライス operator( [::])はオブジェクト ( )col[start:end:step]として表すことができ、整数インデックスの場合と同様に、そのオブジェクトを使用してコレクションを「スライス」できます。sliceslice(start, end, step)

(ネストされている可能性がある) 配列を切り捨てるには、最後の項目を除くすべての項目を選択する必要があります。これは、[:-1]したがってslice(-1)、n 回選択する必要があり、n は配列の次元です。

def another_truncator(array):
  slicers = [slice(-1) for d in array.shape] #create n slicers
  return array[slicers] #slice and return
于 2013-03-14T01:18:15.167 に答える