Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numpy数组上迭代并对每个元素进行操作_Python_Arrays_Numpy_Vectorization - Fatal编程技术网

Python 在numpy数组上迭代并对每个元素进行操作

Python 在numpy数组上迭代并对每个元素进行操作,python,arrays,numpy,vectorization,Python,Arrays,Numpy,Vectorization,我有一个8x8大小的numpy阵列。 以下是numpy阵列: 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],

我有一个8x8大小的numpy阵列。 以下是numpy阵列:

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]])
我想对数组中的元素执行操作。 我创建了一个接受缩放因子值和Numpy数组的函数。 这是:

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
def量化表(Qval,量化表):
如果Qval<50:
比例因子=5000/Qval
对于范围内的x(可量化):
对于范围内的y(可量化):
量化表[x][y]=((比例因子*量化表[x][y]+50/100)
如果量子表[x][y]==0:
可量化[x][y]=1
返回量化
其他:
比例因子=200-2(Qval)
对于范围内的x(可量化):
对于范围内的y(可量化):
量化表[x][y]=((比例因子*量化表[x][y]+50/100)
如果量子表[x][y]==0:
可量化[x][y]=1
返回量化
我在迭代numpy数组和执行操作时遇到问题。我正在尝试应用公式 ((缩放因子值*numpy数组的元素+50)/100)添加到numpy数组的每个元素,并返回修改后的数组。
有人能帮忙吗?

只需删除循环和索引。Numpy会自动广播这些操作。此外,您的许多代码可以从
if…else
语句中删除

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
def量化表(Qval,量化表):
QuantTable=np.asarray(QuantTable,dtype=np.float32)
如果int(Qval)<50:
比例因子=5000/Qval
其他:

scalingFactor=200-2*Qval#确认这是您想要的吗? QuantTable*=缩放因子+0.5 QuantTable[QuantTable==0]=1 返回量化
只需删除循环和索引。Numpy会自动广播这些操作。此外,您的许多代码可以从
if…else
语句中删除

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
def量化表(Qval,量化表):
QuantTable=np.asarray(QuantTable,dtype=np.float32)
如果int(Qval)<50:
比例因子=5000/Qval
其他:

scalingFactor=200-2*Qval#确认这是您想要的吗? QuantTable*=缩放因子+0.5 QuantTable[QuantTable==0]=1 返回量化

我在迭代numpy数组和执行操作时遇到问题。
-详细说明?为什么要循环?
返回scalingFactor*QuantTable+50/100
,因为我需要对每个元素执行操作。如果我的逻辑本身有错误,请纠正我。谢谢。你不需要自己迭代,numpy可以比Python中的任何循环都快得多。@SanketWagh no-事实上,使用循环是实现所需目标的不可取的方式。
numpy
数组的全部要点是它们允许快速高效的向量化操作。
我在迭代numpy数组和执行操作时遇到了问题-详细说明?为什么要循环?
返回scalingFactor*QuantTable+50/100
,因为我需要对每个元素执行操作。如果我的逻辑本身有错误,请纠正我。谢谢。你不需要自己迭代,numpy可以比Python中的任何循环都快得多。@SanketWagh否-确实,使用循环是实现您想要的目标的不可取的方法。
numpy
数组的全部要点是它们允许快速有效的矢量化操作。您需要注意就地操作。如果
QuantTable
是一个整数数组,则会导致截断(因为缩放是一个浮点)@MSeifert噢,说得好。我可能应该添加一个
np.asarray(…,dtype)
cast.scalingFactor=200-2*Qval->这就是我想要的。@COLDSPEED我使用了这个答案,并对它进行了一些修改。它很有魅力。谢谢。你需要小心使用就地操作。如果
QuantTable
是一个整数数组,会导致截断(因为缩放是一个浮点)@MSeifert噢,说得好。我可能应该添加一个
np.asarray(…,dtype)
cast.scalingFactor=200-2*Qval->这就是我想要的。@COLDSPEED我使用了这个答案,并对它做了一些修改。它很有魅力。谢谢。