Python 是否有一个“问题”;反向夹;在numpy中的功能?

Python 是否有一个“问题”;反向夹;在numpy中的功能?,python,numpy,Python,Numpy,我有工作代码,但我想知道是否有一个numpy实现。这更多是为了满足我的好奇心,优化代码,让代码更漂亮;我没有严重的问题。不过,我想这种情况很常见,除了我自己,其他人也会对它感兴趣 所以,情况是:我在循环中多次计算一个值,只想保存最小值和最大值 最初,我使用 import numpy as np vals = [] for obj in objects: #...do stuff... vals.append(obj.calc_value()) #...do more st

我有工作代码,但我想知道是否有一个
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
的数组方法,但在那里找不到它。

您可以在第一项上反转符号,并在两项上应用
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])

我想我可以将4行更改为2行,其中
minmax[0]=min(minmax[0],val)
。这已经更好了,但我仍然对
numpy
实现感到好奇。类似的问题:谢谢@Mstaino的回答!我不会说它更具可读性,但它绝对是有创意的;)我可能应该更清楚地回答我的问题,但是,由于
[-I,I]
列表,很遗憾,这里不可能放弃使用临时变量。您可以将
[-I,I]
替换为
np.array([-1,1])*obj.calc_value()
要消除临时变量,我个人认为
映射
+
zip
组合可读性很强,对于小操作来说性能更高。
vstack
选项不那么重要,它只是给你一个不同的选择
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])