在python中压缩数组?

有没有办法在
python中“压缩”一个数组,以保持相同的范围,但只是将元素的数量减少到给定的值?

例如,我有一个包含1000个元素的数组,我想将其修改为100个.具体来说,我有一个numpy数组

x = linspace(-1,1,1000)

但由于我在项目中使用它的方式,我不能简单地使用linspace重新创建它,因为它不会总是在-1到1的域中并且有1000个元素.这些参数发生了变化,我无法在我定义的函数中访问它们.所以我需要一种方法来压缩数组,同时保持-1到1的映射.可以把它想象为降低阵列的“分辨率”.是否可以使用任何内置函数或不同的库?

最佳答案 “重新采样”数组的一种简单方法是将其分组为块,然后平均每个块:

(分块功能从this answer开始)

#  Chunking function 
def chunks(l, n):
    for i in xrange(0, len(l), n):
        yield l[i:i+n]

# Resampling function
def resample(arr, newLength):
    chunkSize = len(arr)/newLength
    return [np.mean(chunk) for chunk in chunks(arr, chunkSize)]

# Example:
import numpy as np
x = np.linspace(-1,1,15)
y = resample(x, 5)
print y
# Result:
# [-0.85714285714285721, -0.4285714285714286, -3.7007434154171883e-17, 0.42857142857142844, 0.8571428571428571]

如您所见,重采样数组的范围确实向内漂移,但对于较大的数组,此效果会小得多.

我不清楚数组是否总是由numpy.linspace生成.如果是这样,有更简单的方法可以做到这一点,比如简单地选择原始数组的每个第n个成员,其中n由“压缩”比率决定:

def linearResample(arr, newLength):
    spacing = len(arr) / newLength
    return arr[::spacing]
点赞