简体   繁体   中英

amplitude spectrum in Python

I have a given array with a length of over 1'000'000 and values between 0 and 255 (included) as integers. Now I would like to plot on the x-axis the integers from 0 to 255 and on the y-axis the quantity of the corresponding x value in the given array (called Arr in my current code).

I thought about this code:

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

But is there any way I can do this a little bit faster (it takes me several minutes at the moment)? I thought about an import ... , but wasn't able to find a good package for this.

Use numpy.bincount for this task (look for more details here )

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

While I completely agree with the previous answers that you should use a standard histogram algorithm, it's quite easy to greatly speed up your own implementation. Its problem is that you pass through the entire input for each bin , over and over again. It would be much faster to only process the input once, and then write only to the relevant 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM