Iterating over a numpy array and operating on each element

风格不统一 提交于 2019-12-11 15:58:48

问题


I have a numpy array of size 8x8. Here is the numpy array:

QuantTable = np.array([[16, 11 ,10, 16, 24, 40, 51, 61],
                    [12, 12, 14, 19, 26, 58, 60, 55],
                    [14, 13, 16, 24, 40, 57, 69, 56],
                    [14, 17, 22, 29, 51, 87, 80, 62],
                    [18, 22, 37, 29, 51, 87, 80, 62],
                    [24, 35, 55, 64, 81, 109, 103, 77],
                    [49, 64, 78, 87, 103, 121, 120, 101],
                    [72, 92, 95, 98, 112, 100, 103, 99]])

I would like to perform the operations on the elements in the array. I have created a function that accepts a scaling factor value and a Numpy Array. Here it is:

def quantizationTable(Qval, QuantTable):
    if Qval < 50:
        scalingFactor = 5000/Qval
        for x in range(QuantTable):
            for y in range(QuantTable):
                QuantTable[x][y] = ((scalingFactor * QuantTable[x][y] + 50/100)
                if QuantTable[x][y] == 0:
                    QuantTable[x][y] = 1
    return QuantTable
    else:
        scalingFactor = 200 - 2(Qval)
        for x in range(QuantTable):
            for y in range(QuantTable):
                QuantTable[x][y] = ((scalingFactor * QuantTable[x][y] + 50/100)
                if QuantTable[x][y] == 0:
                    QuantTable[x][y] = 1

return QuantTable

I am having trouble iterating over the numpy array and performing my operations. I am trying to apply the formula ((Scaling factor value * element of numpy array + 50)/100) to every element of the numpy array and return the modified array. Can someone please help?


回答1:


Just remove the loops, and the indexing. Numpy automatically broadcasts those operations. Also, a lot of your code can be taken out of the if...else statements.

def quantizationTable(Qval, QuantTable):
    QuantTable = np.asarray(QuantTable, dtype=np.float32)
    if int(Qval) < 50:
        scalingFactor = 5000 / Qval
    else:
        scalingFactor = 200 - 2 * Qval # confirm that this is what you want? 

    QuantTable *= scalingFactor + 0.5
    QuantTable[QuantTable == 0] = 1

    return QuantTable


来源:https://stackoverflow.com/questions/45886000/iterating-over-a-numpy-array-and-operating-on-each-element

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!