【问题标题】:Python ValueError: operands could not be broadcast together with shapesPython ValueError:操作数无法与形状一起广播
【发布时间】:2012-10-31 10:31:17
【问题描述】:

我正在执行 SVD,当我尝试运行我的代码时,我收到以下错误:

ValueError: 操作数不能与形状一起广播 (375, 375) (375, 500)

我正在使用尺寸为 (500, 375) 的图像

这是我的代码:

from PIL import Image
from Image import new
from numpy import *
import numpy as np
from scipy.linalg import svd

im = Image.open("lake.tif")
pix = im.load()
im.show()
r, g, b = im.split()
R = np.array(r.getdata())
R.shape = (500, 375)
Ur, Sr, VrT = svd(R.T, full_matrices=False)
R1 = Ur * diag(Sr) * VrT

【问题讨论】:

    标签: python numpy svd


    【解决方案1】:

    您正在执行组件明智的产品。将这些东西制作成矩阵或使用:

     R1 = np.dot(Ur, np.dot(diag(SR), VrT))
    

    或使用类似的东西:

    Ur, Sr, VrT = map(np.asmatrix, (Ur, diag(Sr), Vrt))
    R1 = Ur * Sr * VrT
    

    如果你做很多矩阵产品(比如这一行),这会更干净,否则数组通常是更可取的,因为它们是基本类型。如果您愿意,当然也可以单独调用 np.asmatrix

    【讨论】:

    • 您可能应该描述如何将 ndarray 转换为 matrix 并解释对于 matrix 对象,乘法按预期工作...
    猜你喜欢
    • 2013-04-07
    • 2014-08-24
    • 2018-02-01
    • 1970-01-01
    • 2017-09-09
    • 2012-08-05
    • 2018-08-18
    • 2020-06-20
    • 2018-12-26
    相关资源
    最近更新 更多