3

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
4

1 に答える 1

7

あなたはコンポーネントごとの製品をやっています。これらのものを行列にするか、次を使用します。

 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

于 2012-11-12T11:45:19.297 に答える