程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了基于值将列表的部分分组为多个列表的 Pythonic 方式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决基于值将列表的部分分组为多个列表的 Pythonic 方式?

开发过程中遇到基于值将列表的部分分组为多个列表的 Pythonic 方式的问题如何解决?下面主要结合日常开发的经验,给出你关于基于值将列表的部分分组为多个列表的 Pythonic 方式的解决方法建议,希望对你解决基于值将列表的部分分组为多个列表的 Pythonic 方式有所启发或帮助;

下面是我绘制的图,其中 y 轴 (v) 是包含在列表中的值。如您所见,列表值在高值段和低值段之间交替,因此列表如下所示:

li = [0.5,0.49,0.5,..,0.001,...,]

我的目标是取高值的六个段中的每一个和低值的六个段中的每一个,然后计算每个段的平均值。为此,我试图将上面的列表分开,并将每个段放入自己的列表中,并将每个列表放入各自的高值/低值列表中。类似的东西:

high_segments = [[high_values1],[high_values2],[high_values3]]
low_segments  = [[low_values1],[low_values2],[low_values3]]

我一直在尝试构建一个 for 循环来执行此操作,但一直在努力解决如何处理低值组和高值组之间的变化。非常感谢任何建议。

基于值将列表的部分分组为多个列表的 Pythonic 方式

解决方法

使用 numpy 并按平均值分割。

import numpy as np

li = np.array([
    0.5,0.49,0.5,0.001,0.002,0.01,])

# Split into high/low groups using the mean:
is_high = li >= li.mean()
is_low = li < li.mean()

# Determine the groups:
diff = np.insert(np.diff(is_high),falsE).astype(np.int)  # array([0,1,0])
groups = diff.cumsum()  # array([0,2,3,3])

high_segments = np.array([lI[groups==kk] for kk in np.unique(groups[is_high])])
low_segments = np.array([lI[groups==kk] for kk in np.unique(groups[is_low])])

high_segments_mean = high_segments.mean(axis=1)
low_segments_mean = low_segments.mean(axis=1)
,

我假设您的输入数组 li 是连续的 6 个高值和 6 个低值,因此该数组有 36 个元素。首先, numpy.reshape 函数创建一个连续的 6 元素子数组。然后,我们可以通过切片选择奇数子阵列(图中高值)和偶数子阵列(低值)。通过第二个轴堆叠两个阵列将形成所需的形状。 block_reduce 函数将为每个块进行计算。

import numpy as np
# conda install -c anaconda scikit-image
from skimage.measure import block_reduce

if __name__ == '__main__':
    li = np.arange(0,36)
    li = li.reshape(-1,6)
    high_values = lI[::2]
    low_values = lI[1::2]
    combined = np.stack((high_values,low_values),axis=1)
    segment_average = block_reduce(combined,BLOCK_SIZE=(1,6),func=np.mean,cval=np.mean(combined)).flatten()
    print(f"[main] input:\n{li}")
    print(f"[main] high_values:\n{high_values}")
    print(f"[main] low_values:\n{low_values}")
    print(f"[main] combined:\n{CombineD}")
    print(f"[main] segment average: {segment_averagE}")

结果:

[main] input:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]
 [30 31 32 33 34 35]]
[main] high_values:
[[ 0  1  2  3  4  5]
 [12 13 14 15 16 17]
 [24 25 26 27 28 29]]
[main] low_values:
[[ 6  7  8  9 10 11]
 [18 19 20 21 22 23]
 [30 31 32 33 34 35]]
[main] combined:
[[[ 0  1  2  3  4  5]
  [ 6  7  8  9 10 11]]

 [[12 13 14 15 16 17]
  [18 19 20 21 22 23]]

 [[24 25 26 27 28 29]
  [30 31 32 33 34 35]]]
[main] segment average: [ 5.5 17.5 29.5]

大佬总结

以上是大佬教程为你收集整理的基于值将列表的部分分组为多个列表的 Pythonic 方式全部内容,希望文章能够帮你解决基于值将列表的部分分组为多个列表的 Pythonic 方式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:方式