python - 如何编写无循环代码来找到每个区域的最大值?
问题描述
1
我有一个向量,它指定了多个区域N
。例如,如果
A = [1,2,3,6,7,9,10]
然后这些区域是 [1,3]、[6,7]、[9,10] 在区间[1,10]
上定义的N=10
。我有另一个长度N
包含一组正数和负数的向量:
x = [0.8,0.1,1,-1,-2,-0.76,0.1,0.2,0.9,0.6]
我想找到每个区域的最大值x
。在这个例子中,结果是:
y = [1,0.1,0.9]
y_locs = [3,7,9]
可以通过首先从中获取区域A
然后使用 for 循环找到每个区域中的最大值来计算每个区域中的最大值。有没有无循环的方法来做到这一点?
解决方案
您可以对数组进行切片并使用内置max()
函数。就像是:
x = [0.8, 0.1, 1, -1, -2, -0.76, 0.1, 0.2, 0.9, 0.6]
# each tuple contains (start_index, length, maximum_value)
max_list = [(0, 3, max(x[0:3])), (5, 2, max(x[5:7])), (8, 2, max(x[8:]))]
locations_list = [max_list[i][0] + x[max_list[i][0]:max_list[i][0] + max_list[i][1]].index(max_list[i][2]) + 1 for i in range(len(max_list))]
print(max_list)
print(locations_list)
产量:
[(0, 3, 1), (5, 2, 0.1), (8, 2, 0.9)]
[3, 7, 9]
笔记:
- 我确实使用了 for 循环来迭代每个部分,但是您可以手动将其扩展为三个没有 for 循环的单独行(尽管这对于大数据来说会变得非常乏味)
- 我不知道它的内部结构
max()
,它可能使用隐藏的 for 循环。
推荐阅读
- python - 我无法从终端将我的代码连接到本地主机网络服务器
- javascript - 如何通过在Javascript中使用循环更改其值来乘法和追加div
- flutter - 获取 CSV 以列出 dart 中的对象
- javascript - Firestore 数据库未定义
- machine-learning - 分类和回归的结合
- c# - 如何使用 MS 身份平台在 OnSignIn 之后触发自定义方法
- c# - Razor 页面模型属性缺失值
- r - 如何在 R 中编写一个数据框表以 excel
- python - 如何通过将可选参数添加到网站的链接以将其转换为 API(烧瓶)来将值传递给 html 输入
- android - Android Jetpack Compose 能够在每个项目上创建带有交互式按钮和值的列表吗?