相关疑难解决方法(0)

是否有numpy max min功能?

是否有一个numpy函数为给定的numpy数组赋予其最大值 - 最小值,即numpy.max(a) - numpy.min(a)?

例如

numpy.xxx([4,3,2, 6] = 4 since max = 6, min = 2, 6 - 4 = 2)
Run Code Online (Sandbox Code Playgroud)

原因:性能提高,因为max和min会导致数组迭代的两倍(在我的情况下是750万或更多的数字).

python numpy max min

17
推荐指数
1
解决办法
1万
查看次数

改善最小/最大下采样

我有一些大型数组(约1亿个点),我需要以交互方式绘制.我当前正在使用Matplotlib.按原样绘制数组变得非常慢并且是浪费,因为无论如何你都无法想象那么多点.

所以我做了一个min/max抽取函数,我将其绑定到轴的'xlim_changed'回调.我采用最小/最大方法,因为数据包含快速尖峰,我不想通过单步执行数据.有更多的包装器可以裁剪到x限制,并在某些条件下跳过处理,但相关部分如下:

def min_max_downsample(x,y,num_bins):
    """ Break the data into num_bins and returns min/max for each bin"""
    pts_per_bin = x.size // num_bins    

    #Create temp to hold the reshaped & slightly cropped y
    y_temp = y[:num_bins*pts_per_bin].reshape((num_bins, pts_per_bin))
    y_out      = np.empty((num_bins,2))
    #Take the min/max by rows.
    y_out[:,0] = y_temp.max(axis=1)
    y_out[:,1] = y_temp.min(axis=1)
    y_out = y_out.ravel()

    #This duplicates the x-value for each min/max y-pair
    x_out = np.empty((num_bins,2))
    x_out[:] = x[:num_bins*pts_per_bin:pts_per_bin,np.newaxis]
    x_out = x_out.ravel()
    return x_out, y_out
Run Code Online (Sandbox Code Playgroud)

这种方法效果非常好并且足够快(在1e8点和2k箱上约80ms).由于它会定期重新计算和更新线的x和y数据,所以滞后很少.

但是,我唯一的抱怨是x数据.此代码复制每个bin的左边缘的x值,并且不返回y min/max对的真实x位置.我通常将箱数设置为轴像素宽度的两倍.所以你不能真正看到差异,因为垃圾箱太小了......但我知道它在那里......它让我烦恼.

因此尝试编号2确实返回每个最小/最大对的实际x值.然而它大约慢了5倍.

def min_max_downsample_v2(x,y,num_bins):
    pts_per_bin = …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x numba

7
推荐指数
1
解决办法
465
查看次数

Python - 嵌套循环与“in”运算符导致运行时间几乎翻倍

我来自 C++/Java 背景,并完成了下面“TwoNumberSum”算法的简单实现。我首先使用传统的嵌套循环以更 C/Java 的方式实现它,然后使用 'in' 运算符。我期望两者都在类似的时间内执行,因为 'in' 理想情况下也应该遍历列表,这应该会导致嵌套循环,因此在某处执行时间相似,但令我惊讶的是,第一个算法花费的时间是第二个的两倍。有人能解释一下是什么导致了运行时如此巨大的差距吗?

我在执行代码段时得到以下结果。

算法 1 的执行时间:1.023191

算法2的执行时间:0.46218059999999994

from timeit import timeit

# First Algorithm using simple lists/arrays
code1 = """
def TwoNumberSum(list, sum):

    for i in range(0, len(list)-1):
        for j in range(i+1, len(list)):
            if list[i] + list[j] == sum:
                return [list[i], list[j]]
    return []


TwoNumberSum([3, 5, -4, 8, 11, 1, -1, 6], 10)
"""
# Second Algorith similar to first using 'in' operator
code2 = """
def TwoNumberSum(list, sum):

    for i in range(0, …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

3
推荐指数
1
解决办法
204
查看次数

此功能是否可以比分别使用最小值和最大值同时检索最小值和最大值?

我有一个函数来同时检索列表的最小值和最大值:

def min_max(iterable, key=None):
    """Retrieve the min and max values of `iterable` simultaneously."""
    if key is None: key = lambda x: x
    if not iterable:
        return None, None
    min_ = max_ = key(iterable[0])
    for i in iterable[1:]:
        if key(i) > key(max_): max_ = i
        if key(i) < key(min_): min_ = i
    return min_, max_
Run Code Online (Sandbox Code Playgroud)

但它让我感到疑惑,因为无论如何我在for循环中进行了两次比较min,max单独使用和单独使用会不会更快?如果是,我如何编辑此功能以提高效率?

python max min

2
推荐指数
1
解决办法
1508
查看次数

查找大型多维 numpy 数组的最小值和最大值的最快方法是什么?

我有一个 numpy 数组,由 20,000 个 RGB 图像组成,每个图像的像素为 220x220。因此,数组 的X_data形状为(20000, 220, 220, 3)

我正在寻找最快的方法来查找整个数据集中的最小和最大像素值。我知道这种类型的任务需要时间,因为我正在搜索大约 30 亿个像素值,但我希望改进我已经找到的解决方案;以下是:

选项 1:展平阵列

对结果数组使用np.flattenand 然后:np.minnp.max

flat = X_data.flatten()
np.min(flat)
np.max(flat)
Run Code Online (Sandbox Code Playgroud)

此方法总共花费了 13 分 11 秒(墙上时间)来查找最小值和最大值。

选项 2:列表理解

使用np.aminnp.amax查找每个图像的最小值和最大值,将它们附加到列表中,然后查找该列表的最小值和最大值:

min_val = np.min([np.amin(X_data[i]) for i in np.arange(X_data.shape[0])])
max_val = np.max([np.amax(X_data[i]) for i in np.arange(X_data.shape[0])])
Run Code Online (Sandbox Code Playgroud)

此方法总共花费了 8 分钟(墙上时间)。

有没有更快的方法来完成这项任务?

编辑:

我忘记在问题的原始表述中提到,我希望它适用于尚未重新缩放的图像数据集,即包含不同大小图像的图像数据集。这意味着使用np.minandnp.max将不起作用,即使它比上述选项更快。

非常感谢!

python arrays numpy image-processing

2
推荐指数
1
解决办法
4771
查看次数

标签 统计

python ×5

numpy ×3

max ×2

min ×2

python-3.x ×2

arrays ×1

image-processing ×1

numba ×1