首页 > 解决方案 > Python 矩阵除法

问题描述

我有一个关于按元素划分矩阵的问题,我的意思是我希望第一个矩阵(foto_dcp,参见代码)的元素 [i,j] 除以第二个矩阵(Q)的元素[i,j]。

一些背景信息:我从存储中加载了图像。我将每个像素的单色值存储在一个名为“pixelMatrix”的矩阵中 这个命令将大矩阵(128x128)变成更小的矩阵(8x8)

foto_dct = skimage.util.view_as_blocks(pixelMatrix, block_shape=(8, 8))

现在,在这样做之后,我需要将 foto_dct 中的每个矩阵除以一个不同的矩阵(在此代码中称为“Q”)元素。

for x in foto_dct:
   for i in range(8):
      for j in range(8):
          x[i,j] = x[i,j] / Q[i,j]

问题是我得到不正确的结果。这是矩阵“Q”:

[[ 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  56  68 109 103  77]
 [ 24  35  55  64  81 104 113  92]
 [ 49  64  78  87 103 121 120 101]
 [ 72  92  95  98 112 100 103  99]]

这是一个示例矩阵(foto_dct[3,3],虽然我已经对其进行了一些操作,矩阵的第 3 列,矩阵的第 3 行,如果您还记得第 1 步的话。)

[[613 250 -86  64 -63  59 -44  24]
 [ 38 -84  50 -57  54 -47  35 -19]
 [-16   4  -4   7  -5   4  -3   1]
 [ 10 -18  19 -20  21 -20  16  -9]
 [-17  19 -18  16 -14  11  -7   4]
 [ -7   9 -10  12 -13  11  -9   5]
 [-11  15 -14  15 -14  11  -9   5]
 [ -1   2  -4   5  -5   4  -3   2]]

这就是我在除法后得到的:

[[43 17 -6  4 -4  4 -3  1]
 [ 2 -4  2 -3  3 -2  2 -1]
 [ 0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0]]

如您所见,例如取元素 [0,0] = 613,因此除法后我们应该得到 [0,0] = 613/16 = 38.3125 (您可以看到它也自动四舍五入?)顺便说一句,我试着改变

x[i,j] = x[i,j] / Q[i,j]

经过

x[i,j] = x[i,j] / 2

并得到正确(尽管四舍五入)的结果。所以这是 Q[i,j]


我也尝试过这样做:

for x in foto_dct:
    x = np.divide(x,Q)

但这返回了原始矩阵,没有做任何事情,甚至没有返回错误代码,即使它应该按元素划分。谁能帮我吗?

标签: pythonpython-3.xmatrixroundingdivision

解决方案


推荐阅读