python - numpy 中是否有“反向剪辑”功能?
问题描述
我有工作代码,但想知道是否有它的numpy
实现。这更多是为了满足我的好奇心以及优化和使代码更漂亮;我没有严重的问题。不过,我想这种情况很常见,以至于除了我自己之外,其他人都会很感兴趣。
所以,情况:我在一个循环中多次计算一个值,并且只想保存最小值和最大值。
最初,我使用
import numpy as np
vals = []
for obj in objects:
#...do stuff...
vals.append(obj.calc_value())
#...do more stuff
minmax = [np.min(vals), np.max(vals)]
哪个有效,又好又短。但是,因为我存储了所有值,但只需要最小值和最大值,这似乎浪费了非常好的内存空间。因此我将其更改为
import numpy as np
minmax = [np.inf, -np.inf]
for obj in objects:
#...do stuff...
val = obj.calc_value()
if val < minmax[0]:
minmax[0] = val
if val > minmax[1]:
minmax[1] = val
#...do more stuff
这也有效,但有点冗长。当然,我可以将代码中的四行提取到我猜的函数中,但是......
我不禁想知道,如果没有这个numpy
功能。类似于“反向”clip
功能。一个函数,类似于clip
,将值与区间进行比较。但是它不会返回(可能更改的)值,因此它位于提供的间隔(这是什么clip
),而是返回所需的(可能扩展的)间隔,以便提供的值位于其中。
import numpy as np
minmax = [np.inf, -np.inf]
for obj in objects:
#...do stuff...
minmax = np.reverse_clip(minmax, obj.calc_value())
#...do more stuff
如果有,我很想听听。另外,有什么想法我怎么能在不问这里的情况下找到它?我查看了numpy
的数组方法,但在那里找不到。
解决方案
您可以反转第一项上的符号并将其应用于max
两者,然后在循环后将其更改回来:
for obj in objects:
i = obj.calc_value()
minmax= map(max, zip([-i, i], minmax)) # using python
minmax = np.vstack((minmax, [-i, i])).max(0) #using numpy
minmax *= np.array([-1, 1]) #using numpy
minmax = [i * j for i, j in zip(a1, [-1, 1])] # using python, or do list(a1) * np.array([-1, 1])
推荐阅读
- c - 同时绘制正弦和余弦曲线
- perl - Perl 单引号替换
- graph - Neo4J - 根据节点属性值选择 MATCH 语句
- nginx - 将 api/rest 的 Nginx URL 重写为 rest/v1
- sql - SQL 创建多个与单个“状态表”
- algorithm - C语言中这个函数的时间复杂度是多少?
- mobile - 如何构建一个只显示网页而没有菜单或任何按钮的android浏览器
- javascript - JavaScript:如何突破范围
- java - Spring Boot - 在客户端自动填写 Web 表单
- c# - .NET 4.7.2 ASP.NET WebForms 网站中的依赖注入 - 构造函数注入不起作用