Python中的振幅谱

2024-06-16 11:17:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个长度超过1'000'000的给定数组,值在0255(包括)之间作为整数。现在我想在x轴上绘制从0255的整数,在y轴上绘制给定数组中相应x值的数量(在我当前的代码中称为Arr)。你知道吗

我想到了这个密码:

    list = []
    for i in range(0, 256):
        icounter = 0
        for x in range(len(Arr)):
            if Arr[x] == i:
                icounter += 1
        list.append(icounter)

但是有没有什么方法可以让我做得更快一点(我现在要花几分钟的时间)?我想了一个import ...,但是没有找到一个好的包。你知道吗


Tags: 代码in密码for数量lenif绘制
2条回答

为此任务使用numpy.bincount(查看更多详细信息here

import numpy as np
list = np.bincount(Arr)

虽然我完全同意前面的答案,即您应该使用标准的直方图算法,但很容易大大加快您自己的实现。它的问题是你一遍又一遍地传递每个箱子的整个输入。只处理一次输入,然后只写入相关的bin,速度会快得多:

def hist(arr):
    nbins = 256
    result = [0] * nbins   # or np.zeroes(nbins)
    for y in arr:
        if y>=0 and y<nbins:
            result[y] += 1
    return result

相关问题 更多 >