python - 基于值将列表的部分分组为多个列表的 Pythonic 方式
问题描述
下面是我制作的图,其中 y 轴 (v) 是列表中包含的值。如您所见,列表值在高值段和低值段之间交替,使得列表如下所示:
li = [0.5,0.49,0.5,..,0.5,0.001,0.001,...,0.001,0.49,0.5,...,0.5,]
我的目标是取高值的六个段中的每一个和低值的六个段中的每一个,然后计算每个段的平均值。为此,我试图将上面的列表分开并将每个段放入自己的列表中,并将每个列表放入相应的高值/低值列表中。类似于以下内容:
high_segments = [[high_values1],[high_values2],[high_values3]]
low_segments = [[low_values1],[low_values2],[low_values3]]
我一直在尝试构建一个 for 循环来做到这一点,但一直在努力解决如何处理低值组和高值组之间的变化。非常感谢任何建议。
解决方案
使用numpy
和平均分割。
import numpy as np
li = np.array([
0.5, 0.49, 0.5,
0.001, 0.001, 0.001,
0.49, 0.5, 0.5,
0, 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), 0, False).astype(np.int) # array([0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0])
groups = diff.cumsum() # array([0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 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)
推荐阅读
- android - 无法播放将自动下载的视频
- python - 使用 Selenium、BeautifulSoup 和 Panda 从 JavaScript 网页抓取表格
- mongoose - NestJS MongoDB 嵌套对象模式
- python - Python 中 CLI 和库的模块化代码
- ruby-on-rails - Rails 6 - db:migrate NameError:错误的常量名称
- jwt - 仅服务器端使用 X509Certificate2 进行 JWT 签名
- javascript - 服务器加载资源失败 (404) 我该怎么办?
- python - 按时间间隔对一组事件进行分组(无熊猫)
- r - R中的列名加倍为字符
- python-3.x - 无法安装 Pygame python 3.9.2