我是大学的CS专业,为我的Calc III课程编写一个涉及奇异值分解的编程项目.该想法基本上是将m×n维度的图像转换为m×n矩阵,其中每个元素是表示点(m,n)处的像素的颜色通道(r,g,b)的元组.我正在使用Python,因为它是我迄今为止(好)教授的唯一语言.
据我所知,Python通常不喜欢元组作为数组的元素.我对自己进行了一些研究并找到了一种解决方法,即按如下方式预先分配数组:
def image_to_array(): #converts an image to an array
aPic = loadPicture("zorak_color.gif")
ph = getHeight(aPic)
pw = getWidth(aPic)
anArray = zeros((ph,pw), dtype='O')
for h in range(ph):
for w in range(pw):
p = getPixel(aPic, w, h)
anArray[h][w] = (getRGB(p))
return anArray
Run Code Online (Sandbox Code Playgroud)
这适用于赋值的第一部分,它只是将图像转换为矩阵(不涉及线性代数).
然而,具有SVD的部分变得更加棘手.当我调用内置的numPy svd函数时,使用我从我的图像构建的数组(其中每个元素是一个元组),我得到以下错误:
Traceback (most recent call last):
File "<pyshell#5>", line 1, in -toplevel-
svd(x)
File "C:\Python24\Lib\site-packages\numpy\linalg\linalg.py", line 724, in svd
a = _fastCopyAndTranspose(t, a)
File "C:\Python24\Lib\site-packages\numpy\linalg\linalg.py", line 107, in _fastCopyAndTranspose
cast_arrays = cast_arrays + (_fastCT(a.astype(type)),)
ValueError: setting …Run Code Online (Sandbox Code Playgroud)