1

我想通过将每个维度中其形状的上限减小一来减小任意等级的 numpy ndarray 的大小。数组值不应相对于其原始索引移动。

所以,

    [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)

希望这有效。

编辑:你没有指定应该如何截断数组:如果你只想要一堆:-1s 像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]。实际上,其中使用的切片运算符([::]col[start:end:step]可以表示为一个slice对象(slice(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 回答