我希望通过将每个维度的形状上限减一来减小任意等级的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]])
我已经考虑过reshape
和resize
但没有成功。提前了解数组排名我知道如何使用像truncated_array = array[:-1,:-1]
这样的视图,但我不知道如何使该概念适用于任意排名。是否有类似Elipses
,...
的固定宽度?这可能有所帮助。
答案 0 :(得分:0)
def truncator(array):
new_shape = [d-1 for d in array.shape]
return np.resize(array, new_shape)
希望这有效。
编辑:您没有指定数据应该如何被截断:如果您只想要一堆:-1
像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