gpt4 book ai didi

python - 在python中压缩数组?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:21 26 4
gpt4 key购买 nike

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

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

x = linspace(-1,1,1000)

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

最佳答案

“重新采样”数组的一种简单方法是将其分组为 block ,然后对每个 block 进行平均:

(分块函数来自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]

关于python - 在python中压缩数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25713738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com